Struct Mat4

Source
#[repr(C)]
pub struct Mat4 { pub cols: [Vec4; 4], }
Expand description

A 4x4 column-major matrix, used for 3D affine transformations.

This is the primary type for representing transformations (translation, rotation, scale) in 3D space. It is also used for camera view and projection matrices. The memory layout is column-major, which is compatible with modern graphics APIs like Vulkan, Metal, and DirectX.

Fields§

§cols: [Vec4; 4]

The columns of the matrix. cols[0] is the first column, and so on.

Implementations§

Source§

impl Mat4

Source

pub const IDENTITY: Self

The 4x4 identity matrix.

Source

pub const ZERO: Self

A 4x4 matrix with all elements set to 0.

Source

pub fn from_cols(c0: Vec4, c1: Vec4, c2: Vec4, c3: Vec4) -> Self

Creates a new matrix from four column vectors.

Source

pub fn from_translation(v: Vec3) -> Self

Creates a translation matrix.

§Arguments
  • v: The translation vector to apply.
Source

pub fn from_scale(scale: Vec3) -> Self

Creates a non-uniform scaling matrix.

Source

pub fn from_rotation_x(angle: f32) -> Self

Creates a matrix for a rotation around the X-axis.

§Arguments
  • angle: The angle of rotation in radians.
Source

pub fn from_rotation_y(angle: f32) -> Self

Creates a matrix for a right-handed rotation around the Y-axis.

§Arguments
  • angle: The angle of rotation in radians.
Source

pub fn from_rotation_z(angle: f32) -> Self

Creates a matrix for a rotation around the Z-axis.

§Arguments
  • angle: The angle of rotation in radians.
Source

pub fn from_axis_angle(axis: Vec3, angle: f32) -> Self

Creates a rotation matrix from a normalized axis and an angle.

§Arguments
  • axis: The axis of rotation. Must be a unit vector.
  • angle: The angle of rotation in radians.
Source

pub fn from_quat(q: Quaternion) -> Self

Creates a rotation matrix from a quaternion.

Source

pub fn perspective_rh_zo( fov_y_radians: f32, aspect_ratio: f32, z_near: f32, z_far: f32, ) -> Self

Creates a right-handed perspective projection matrix with a [0, 1] depth range (ZO).

§Arguments
  • fov_y_radians: Vertical field of view in radians.
  • aspect_ratio: Width divided by height of the viewport.
  • z_near: Distance to the near clipping plane (must be positive).
  • z_far: Distance to the far clipping plane (must be positive and > z_near).
Source

pub fn orthographic_rh_zo( left: f32, right: f32, bottom: f32, top: f32, z_near: f32, z_far: f32, ) -> Self

Creates a right-handed orthographic projection matrix with a [0, 1] depth range (ZO).

Source

pub fn look_at_rh(eye: Vec3, target: Vec3, up: Vec3) -> Option<Self>

Creates a right-handed view matrix for a camera looking from eye towards target.

§Arguments
  • eye: The position of the camera in world space.
  • target: The point in world space that the camera is looking at.
  • up: A vector indicating the “up” direction of the world (commonly Vec3::Y).
§Returns

Returns Some(Mat4) if a valid view matrix can be constructed, or None if eye and target are too close, or if up is parallel to the view direction.

Source

pub fn transpose(&self) -> Self

Returns the transpose of the matrix, where rows and columns are swapped.

Source

pub fn determinant(&self) -> f32

Computes the determinant of the matrix.

Source

pub fn inverse(&self) -> Option<Self>

Computes the inverse of the matrix. Returns None if the matrix is not invertible.

Source

pub fn affine_inverse(&self) -> Option<Self>

Computes the inverse of an affine transformation matrix more efficiently and with better numerical stability than the general inverse method.

An affine matrix is one composed of only translation, rotation, and scale.

§Returns

None if the matrix is not affine or is not invertible.

Trait Implementations§

Source§

impl Clone for Mat4

Source§

fn clone(&self) -> Mat4

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Mat4

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Mat4

Source§

fn default() -> Self

Returns the 4x4 identity matrix.

Source§

impl Mul<Vec4> for Mat4

Source§

fn mul(self, rhs: Vec4) -> Self::Output

Transforms a Vec4 by this matrix.

Source§

type Output = Vec4

The resulting type after applying the * operator.
Source§

impl Mul for Mat4

Source§

fn mul(self, rhs: Mat4) -> Self::Output

Multiplies this matrix by another Mat4. Note that matrix multiplication is not commutative.

Source§

type Output = Mat4

The resulting type after applying the * operator.
Source§

impl PartialEq for Mat4

Source§

fn eq(&self, other: &Mat4) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Mat4

Source§

impl StructuralPartialEq for Mat4

Auto Trait Implementations§

§

impl Freeze for Mat4

§

impl RefUnwindSafe for Mat4

§

impl Send for Mat4

§

impl Sync for Mat4

§

impl Unpin for Mat4

§

impl UnwindSafe for Mat4

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.