Decomposes a transformation matrix into its component transformations.
The algorithm for decomposing a matrix is taken from the CSS3 Transforms specification; specifically, the decomposition code is based on the equivalent code published in "Graphics Gems II", edited by Jim Arvo, and available online.
Computes the determinant of the given matrix.
Checks whether the two given #graphene_matrix_t matrices are byte-by-byte equal.
While this function is faster than graphene_matrix_equal(), it can also return false negatives, so it should be used in conjuction with either graphene_matrix_equal() or graphene_matrix_near(). For instance:
if (graphene_matrix_equal_fast (a, b))
{
// matrices are definitely the same
}
else
{
if (graphene_matrix_equal (a, b))
// matrices contain the same values within an epsilon of FLT_EPSILON
else if (graphene_matrix_near (a, b, 0.0001))
// matrices contain the same values within an epsilon of 0.0001
else
// matrices are not equal
}
Frees the resources allocated by graphene_matrix_alloc().
Retrieves the given row vector at index_
inside a matrix.
the index of the row vector, between 0 and 3
Retrieves the value at the given row
and col
index.
the row index
the column index
Retrieves the scaling factor on the X axis in m
.
Retrieves the translation component on the X axis from m
.
Retrieves the scaling factor on the Y axis in m
.
Retrieves the translation component on the Y axis from m
.
Retrieves the scaling factor on the Z axis in m
.
Retrieves the translation component on the Z axis from m
.
Initializes a #graphene_matrix_t from the values of an affine transformation matrix.
The arguments map to the following matrix layout:
|[ ⎛ xx yx ⎞ ⎛ a b 0 ⎞ ⎜ xy yy ⎟ = ⎜ c d 0 ⎟ ⎝ x0 y0 ⎠ ⎝ tx ty 1 ⎠
This function can be used to convert between an affine matrix type
from other libraries and a #graphene_matrix_t.
@param xx the xx member
@param yx the yx member
@param xy the xy member
@param yy the yy member
@param x0 the x0 member
@param y0 the y0 member
Initializes a #graphene_matrix_t compatible with #graphene_frustum_t.
See also: graphene_frustum_init_from_matrix()
distance of the left clipping plane
distance of the right clipping plane
distance of the bottom clipping plane
distance of the top clipping plane
distance of the near clipping plane
distance of the far clipping plane
Initializes a #graphene_matrix_t so that it positions the "camera"
at the given eye
coordinates towards an object at the center
coordinates. The top of the camera is aligned to the direction
of the up
vector.
Before the transform, the camera is assumed to be placed at the origin, looking towards the negative Z axis, with the top side of the camera facing in the direction of the Y axis and the right side in the direction of the X axis.
In theory, one could use m
to transform a model of such a camera
into world-space. However, it is more common to use the inverse of
m
to transform another object from world coordinates to the view
coordinates of the camera. Typically you would then apply the
camera projection transform to get from view to screen
coordinates.
the vector describing the position to look from
the vector describing the position to look at
the vector describing the world's upward direction; usually, this is the graphene_vec3_y_axis() vector
Initializes a #graphene_matrix_t with an orthographic projection.
the left edge of the clipping plane
the right edge of the clipping plane
the top edge of the clipping plane
the bottom edge of the clipping plane
the distance of the near clipping plane
the distance of the far clipping plane
Linearly interpolates the two given #graphene_matrix_t by interpolating the decomposed transformations separately.
If either matrix cannot be reduced to their transformations then the interpolation cannot be performed, and this function will return an identity matrix.
Checks whether the given #graphene_matrix_t is compatible with an a 2D affine transformation matrix.
Checks whether a #graphene_matrix_t has a visible back face.
Checks whether the given #graphene_matrix_t is the identity matrix.
Checks whether a matrix is singular.
Prints the contents of a matrix to the standard error stream.
This function is only useful for debugging; there are no guarantees made on the format of the output.
Adds a rotation transformation to m,
using the given angle
and axis
vector.
This is the equivalent of calling graphene_matrix_init_rotate() and
then multiplying the matrix m
with the rotation matrix.
the rotation angle, in degrees
the rotation axis, as a #graphene_vec3_t
Adds a rotation transformation to m,
using the given
#graphene_quaternion_t.
This is the equivalent of calling graphene_quaternion_to_matrix() and
then multiplying m
with the rotation matrix.
a rotation described by a #graphene_quaternion_t
Adds a rotation transformation around the X axis to m,
using
the given angle
.
See also: graphene_matrix_rotate()
the rotation angle, in degrees
Adds a rotation transformation around the Y axis to m,
using
the given angle
.
See also: graphene_matrix_rotate()
the rotation angle, in degrees
Adds a rotation transformation around the Z axis to m,
using
the given angle
.
See also: graphene_matrix_rotate()
the rotation angle, in degrees
Adds a scaling transformation to m,
using the three
given factors.
This is the equivalent of calling graphene_matrix_init_scale() and then
multiplying the matrix m
with the scale matrix.
scaling factor on the X axis
scaling factor on the Y axis
scaling factor on the Z axis
Adds a skew of factor
on the X and Y axis to the given matrix.
skew factor
Adds a skew of factor
on the X and Z axis to the given matrix.
skew factor
Adds a skew of factor
on the Y and Z axis to the given matrix.
skew factor
Converts a #graphene_matrix_t to an affine transformation matrix, if the given matrix is compatible.
The returned values have the following layout:
|[ ⎛ xx yx ⎞ ⎛ a b 0 ⎞ ⎜ xy yy ⎟ = ⎜ c d 0 ⎟ ⎝ x0 y0 ⎠ ⎝ tx ty 1 ⎠
This function can be used to convert between a #graphene_matrix_t
and an affine matrix type from other libraries.
Converts a #graphene_matrix_t to an array of floating point values.
Transforms the given #graphene_point_t using the matrix m
.
Unlike graphene_matrix_transform_vec3(), this function will take into account the fourth row vector of the #graphene_matrix_t when computing the dot product of each row vector of the matrix.
See also: graphene_simd4x4f_point3_mul()
Transforms the given #graphene_point3d_t using the matrix m
.
Unlike graphene_matrix_transform_vec3(), this function will take into account the fourth row vector of the #graphene_matrix_t when computing the dot product of each row vector of the matrix.
See also: graphene_simd4x4f_point3_mul()
a #graphene_point3d_t
Adds a translation transformation to m
using the coordinates
of the given #graphene_point3d_t.
This is the equivalent of calling graphene_matrix_init_translate() and
then multiplying m
with the translation matrix.
a #graphene_point3d_t
Unprojects the given point
using the projection
matrix and
a modelview
matrix.
a #graphene_matrix_t for the modelview matrix; this is the inverse of the modelview used when projecting the point
a #graphene_point3d_t with the coordinates of the point
A structure capable of holding a 4x4 matrix.
The contents of the #graphene_matrix_t structure are private and should never be accessed directly.