#[repr(C)]pub struct Mat4 {
pub x_axis: Vec4,
pub y_axis: Vec4,
pub z_axis: Vec4,
pub w_axis: Vec4,
}
Expand description
A 4x4 column major matrix.
This type is 16 byte aligned.
Fields
x_axis: Vec4
y_axis: Vec4
z_axis: Vec4
w_axis: Vec4
Implementations
sourceimpl Mat4
impl Mat4
sourcepub fn from_cols(x_axis: Vec4, y_axis: Vec4, z_axis: Vec4, w_axis: Vec4) -> Mat4
pub fn from_cols(x_axis: Vec4, y_axis: Vec4, z_axis: Vec4, w_axis: Vec4) -> Mat4
Creates a 4x4 matrix from four column vectors.
sourcepub fn from_cols_array(m: &[f32; 16]) -> Mat4
pub fn from_cols_array(m: &[f32; 16]) -> Mat4
Creates a 4x4 matrix from a [f32; 16]
stored in column major order.
If your data is stored in row major you will need to transpose
the
returned matrix.
sourcepub fn to_cols_array(&self) -> [f32; 16]
pub fn to_cols_array(&self) -> [f32; 16]
Creates a [f32; 16]
storing data in column major order.
If you require data in row major order transpose
the matrix first.
sourcepub fn from_cols_array_2d(m: &[[f32; 4]; 4]) -> Mat4
pub fn from_cols_array_2d(m: &[[f32; 4]; 4]) -> Mat4
Creates a 4x4 matrix from a [[f32; 4]; 4]
stored in column major
order. If your data is in row major order you will need to transpose
the returned matrix.
sourcepub fn to_cols_array_2d(&self) -> [[f32; 4]; 4]
pub fn to_cols_array_2d(&self) -> [[f32; 4]; 4]
Creates a [[f32; 4]; 4]
storing data in column major order.
If you require data in row major order transpose
the matrix first.
sourcepub fn from_scale_rotation_translation(
scale: Vec3,
rotation: Quat,
translation: Vec3
) -> Mat4
pub fn from_scale_rotation_translation(
scale: Vec3,
rotation: Quat,
translation: Vec3
) -> Mat4
Creates a 4x4 homogeneous transformation matrix from the given scale
,
rotation
and translation
.
sourcepub fn from_rotation_translation(rotation: Quat, translation: Vec3) -> Mat4
pub fn from_rotation_translation(rotation: Quat, translation: Vec3) -> Mat4
Creates a 4x4 homogeneous transformation matrix from the given translation
.
sourcepub fn to_scale_rotation_translation(&self) -> (Vec3, Quat, Vec3)
pub fn to_scale_rotation_translation(&self) -> (Vec3, Quat, Vec3)
Extracts scale
, rotation
and translation
from self
. The input matrix is expected to
be a 4x4 homogeneous transformation matrix otherwise the output will be invalid.
sourcepub fn from_quat(rotation: Quat) -> Mat4
pub fn from_quat(rotation: Quat) -> Mat4
Creates a 4x4 homogeneous transformation matrix from the given rotation
.
sourcepub fn from_translation(translation: Vec3) -> Mat4
pub fn from_translation(translation: Vec3) -> Mat4
Creates a 4x4 homogeneous transformation matrix from the given translation
.
sourcepub fn from_axis_angle(axis: Vec3, angle: f32) -> Mat4
pub fn from_axis_angle(axis: Vec3, angle: f32) -> Mat4
Creates a 4x4 homogeneous transformation matrix containing a rotation
around a normalized rotation axis
of angle
(in radians).
sourcepub fn from_rotation_ypr(yaw: f32, pitch: f32, roll: f32) -> Mat4
pub fn from_rotation_ypr(yaw: f32, pitch: f32, roll: f32) -> Mat4
Creates a 4x4 homogeneous transformation matrix containing a rotation around the given Euler angles (in radians).
sourcepub fn from_rotation_x(angle: f32) -> Mat4
pub fn from_rotation_x(angle: f32) -> Mat4
Creates a 4x4 homogeneous transformation matrix containing a rotation
around the x axis of angle
(in radians).
sourcepub fn from_rotation_y(angle: f32) -> Mat4
pub fn from_rotation_y(angle: f32) -> Mat4
Creates a 4x4 homogeneous transformation matrix containing a rotation
around the y axis of angle
(in radians).
sourcepub fn from_rotation_z(angle: f32) -> Mat4
pub fn from_rotation_z(angle: f32) -> Mat4
Creates a 4x4 homogeneous transformation matrix containing a rotation
around the z axis of angle
(in radians).
sourcepub fn from_scale(scale: Vec3) -> Mat4
pub fn from_scale(scale: Vec3) -> Mat4
Creates a 4x4 homogeneous transformation matrix containing the given
non-uniform scale
.
pub fn set_x_axis(&mut self, x: Vec4)
please use .x_axis
instead
pub fn set_y_axis(&mut self, y: Vec4)
please use .y_axis
instead
pub fn set_z_axis(&mut self, z: Vec4)
please use .z_axis
instead
pub fn set_w_axis(&mut self, w: Vec4)
please use .w_axis
instead
pub fn x_axis(&self) -> Vec4
please use .x_axis
instead
pub fn y_axis(&self) -> Vec4
please use .y_axis
instead
pub fn z_axis(&self) -> Vec4
please use .z_axis
instead
pub fn w_axis(&self) -> Vec4
please use .w_axis
instead
pub fn x_axis_mut(&mut self) -> &mut Vec4
please use .x_axis
instead
pub fn y_axis_mut(&mut self) -> &mut Vec4
please use .y_axis
instead
pub fn z_axis_mut(&mut self) -> &mut Vec4
please use .z_axis
instead
pub fn w_axis_mut(&mut self) -> &mut Vec4
please use .w_axis
instead
sourcepub fn determinant(&self) -> f32
pub fn determinant(&self) -> f32
Returns the determinant of self
.
sourcepub fn inverse(&self) -> Mat4
pub fn inverse(&self) -> Mat4
Returns the inverse of self
.
If the matrix is not invertible the returned matrix will be invalid.
sourcepub fn look_at_lh(eye: Vec3, center: Vec3, up: Vec3) -> Mat4
pub fn look_at_lh(eye: Vec3, center: Vec3, up: Vec3) -> Mat4
Creates a left-handed view matrix using a camera position, an up direction, and a focal point.
sourcepub fn look_at_rh(eye: Vec3, center: Vec3, up: Vec3) -> Mat4
pub fn look_at_rh(eye: Vec3, center: Vec3, up: Vec3) -> Mat4
Creates a right-handed view matrix using a camera position, an up direction, and a focal point.
sourcepub fn perspective_rh_gl(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32,
z_far: f32
) -> Mat4
pub fn perspective_rh_gl(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32,
z_far: f32
) -> Mat4
Creates a right-handed perspective projection matrix with [-1,1] depth range.
This is the same as the OpenGL gluPerspective
function.
See https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluPerspective.xml
sourcepub fn perspective_lh(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32,
z_far: f32
) -> Mat4
pub fn perspective_lh(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32,
z_far: f32
) -> Mat4
Creates a left-handed perspective projection matrix with [0,1] depth range.
sourcepub fn perspective_rh(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32,
z_far: f32
) -> Mat4
pub fn perspective_rh(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32,
z_far: f32
) -> Mat4
Creates a right-handed perspective projection matrix with [0,1] depth range.
sourcepub fn perspective_infinite_lh(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32
) -> Mat4
pub fn perspective_infinite_lh(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32
) -> Mat4
Creates an infinite left-handed perspective projection matrix with [0,1] depth range.
sourcepub fn perspective_infinite_reverse_lh(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32
) -> Mat4
pub fn perspective_infinite_reverse_lh(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32
) -> Mat4
Creates an infinite left-handed perspective projection matrix with [0,1] depth range.
sourcepub fn perspective_infinite_rh(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32
) -> Mat4
pub fn perspective_infinite_rh(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32
) -> Mat4
Creates an infinite right-handed perspective projection matrix with [0,1] depth range.
sourcepub fn perspective_infinite_reverse_rh(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32
) -> Mat4
pub fn perspective_infinite_reverse_rh(
fov_y_radians: f32,
aspect_ratio: f32,
z_near: f32
) -> Mat4
Creates an infinite reverse right-handed perspective projection matrix with [0,1] depth range.
sourcepub fn orthographic_rh_gl(
left: f32,
right: f32,
bottom: f32,
top: f32,
near: f32,
far: f32
) -> Mat4
pub fn orthographic_rh_gl(
left: f32,
right: f32,
bottom: f32,
top: f32,
near: f32,
far: f32
) -> Mat4
Creates a right-handed orthographic projection matrix with [-1,1] depth
range. This is the same as the OpenGL glOrtho
function in OpenGL.
See
https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glOrtho.xml
sourcepub fn orthographic_lh(
left: f32,
right: f32,
bottom: f32,
top: f32,
near: f32,
far: f32
) -> Mat4
pub fn orthographic_lh(
left: f32,
right: f32,
bottom: f32,
top: f32,
near: f32,
far: f32
) -> Mat4
Creates a left-handed orthographic projection matrix with [0,1] depth range.
sourcepub fn orthographic_rh(
left: f32,
right: f32,
bottom: f32,
top: f32,
near: f32,
far: f32
) -> Mat4
pub fn orthographic_rh(
left: f32,
right: f32,
bottom: f32,
top: f32,
near: f32,
far: f32
) -> Mat4
Creates a right-handed orthographic projection matrix with [0,1] depth range.
sourcepub fn mul_scalar(&self, other: f32) -> Mat4
pub fn mul_scalar(&self, other: f32) -> Mat4
Multiplies this matrix by a scalar value.
sourcepub fn transform_point3(&self, other: Vec3) -> Vec3
pub fn transform_point3(&self, other: Vec3) -> Vec3
Transforms the given Vec3
as 3D point.
This is the equivalent of multiplying the Vec3
as a Vec4
where w
is 1.0
.
sourcepub fn transform_point3a(&self, other: Vec3A) -> Vec3A
pub fn transform_point3a(&self, other: Vec3A) -> Vec3A
Transforms the given Vec3A
as 3D point.
This is the equivalent of multiplying the Vec3A
as a Vec4
where w
is 1.0
.
sourcepub fn transform_vector3(&self, other: Vec3) -> Vec3
pub fn transform_vector3(&self, other: Vec3) -> Vec3
Transforms the give Vec3
as 3D vector.
This is the equivalent of multiplying the Vec3
as a Vec4
where w
is 0.0
.
sourcepub fn transform_vector3a(&self, other: Vec3A) -> Vec3A
pub fn transform_vector3a(&self, other: Vec3A) -> Vec3A
Transforms the give Vec3A
as 3D vector.
This is the equivalent of multiplying the Vec3A
as a Vec4
where w
is 0.0
.
sourcepub fn abs_diff_eq(&self, other: Mat4, max_abs_diff: f32) -> bool
pub fn abs_diff_eq(&self, other: Mat4, max_abs_diff: f32) -> bool
Returns true if the absolute difference of all elements between self
and other
is less
than or equal to max_abs_diff
.
This can be used to compare if two Mat4
’s contain similar elements. It works best when
comparing with a known value. The max_abs_diff
that should be used used depends on the
values being compared against.
For more on floating point comparisons see https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
Trait Implementations
sourceimpl PartialEq<Mat4> for Mat4
impl PartialEq<Mat4> for Mat4
sourceimpl PartialOrd<Mat4> for Mat4
impl PartialOrd<Mat4> for Mat4
sourcefn partial_cmp(&self, other: &Mat4) -> Option<Ordering>
fn partial_cmp(&self, other: &Mat4) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
impl Copy for Mat4
impl StructuralPartialEq for Mat4
Auto Trait Implementations
impl RefUnwindSafe for Mat4
impl Send for Mat4
impl Sync for Mat4
impl Unpin for Mat4
impl UnwindSafe for Mat4
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more