Struct graphene::Matrix [−][src]
pub struct Matrix(_);
Expand description
A structure capable of holding a 4x4 matrix.
The contents of the Matrix
structure are private and
should never be accessed directly.
Implementations
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.
Returns
true
if the matrix could be decomposed
translate
the translation vector
scale
the scale vector
rotate
the rotation quaternion
shear
the shear vector
perspective
the perspective vector
Checks whether the two given Matrix
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
near()
. For instance:
⚠️ The following code is in C ⚠️
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
}
b
a Matrix
Returns
true
if the matrices are equal. and false
otherwise
Initializes a Matrix
from the values of an affine
transformation matrix.
The arguments map to the following matrix layout:
⚠️ The following code is in plain ⚠️
⎛ 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 Matrix
.
xx
the xx member
yx
the yx member
xy
the xy member
yy
the yy member
x_0
the x0 member
y_0
the y0 member
Returns
the initialized matrix
Initializes a Matrix
compatible with Frustum
.
See also: Frustum::init_from_matrix()
left
distance of the left clipping plane
right
distance of the right clipping plane
bottom
distance of the bottom clipping plane
top
distance of the top clipping plane
z_near
distance of the near clipping plane
z_far
distance of the far clipping plane
Returns
the initialized matrix
Initializes a Matrix
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 self
to transform a model of such a camera
into world-space. However, it is more common to use the inverse of
self
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.
eye
the vector describing the position to look from
center
the vector describing the position to look at
up
the vector describing the world’s upward direction; usually,
this is the Vec3::y_axis()
vector
Returns
the initialized matrix
Initializes a Matrix
with an orthographic projection.
left
the left edge of the clipping plane
right
the right edge of the clipping plane
top
the top edge of the clipping plane
bottom
the bottom edge of the clipping plane
z_near
the distance of the near clipping plane
z_far
the distance of the far clipping plane
Returns
the initialized matrix
Linearly interpolates the two given Matrix
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.
b
a Matrix
factor
the linear interpolation factor
Returns
res
return location for the interpolated matrix
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 self
, using the given angle
and axis
vector.
This is the equivalent of calling init_rotate()
and
then multiplying the matrix self
with the rotation matrix.
angle
the rotation angle, in degrees
axis
the rotation axis, as a Vec3
Adds a rotation transformation to self
, using the given
Quaternion
.
This is the equivalent of calling Quaternion::to_matrix()
and
then multiplying self
with the rotation matrix.
q
a rotation described by a Quaternion
Adds a scaling transformation to self
, using the three
given factors.
This is the equivalent of calling init_scale()
and then
multiplying the matrix self
with the scale matrix.
factor_x
scaling factor on the X axis
factor_y
scaling factor on the Y axis
factor_z
scaling factor on the Z axis
Converts a Matrix
to an affine transformation
matrix, if the given matrix is compatible.
The returned values have the following layout:
⚠️ The following code is in plain ⚠️
⎛ xx yx ⎞ ⎛ a b 0 ⎞
⎜ xy yy ⎟ = ⎜ c d 0 ⎟
⎝ x0 y0 ⎠ ⎝ tx ty 1 ⎠
This function can be used to convert between a Matrix
and an affine matrix type from other libraries.
Returns
true
if the matrix is compatible with an affine
transformation matrix
xx
return location for the xx member
yx
return location for the yx member
xy
return location for the xy member
yy
return location for the yy member
x_0
return location for the x0 member
y_0
return location for the y0 member
Transforms the given Point
using the matrix self
.
Unlike transform_vec3()
, this function will take into
account the fourth row vector of the Matrix
when computing
the dot product of each row vector of the matrix.
See also: graphene_simd4x4f_point3_mul()
p
a Point
Returns
res
return location for the
transformed Point
Transforms the given Point3D
using the matrix self
.
Unlike transform_vec3()
, this function will take into
account the fourth row vector of the Matrix
when computing
the dot product of each row vector of the matrix.
See also: graphene_simd4x4f_point3_mul()
p
a Point3D
Returns
res
return location for the result
Adds a translation transformation to self
using the coordinates
of the given Point3D
.
This is the equivalent of calling init_translate()
and
then multiplying self
with the translation matrix.
pos
a Point3D
Trait Implementations
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
Returns the type identifier of Self
.
Auto Trait Implementations
impl RefUnwindSafe for Matrix
impl UnwindSafe for Matrix
Blanket Implementations
Mutably borrows from an owned value. Read more
impl<'a, T, C> FromValueOptional<'a> for T where
C: ValueTypeChecker<Error = ValueTypeMismatchOrNoneError>,
T: FromValue<'a, Checker = C>,