#[repr(C)]pub struct Mat4<F> {
pub x: Vec4<F>,
pub y: Vec4<F>,
pub z: Vec4<F>,
pub p: Vec4<F>,
}
Expand description
A 4x4 matrix
This matrix is internally stored column-major (as that is better for GPU compatibility and possibly other reasons), but the API (e.g. the order of function parameters to the new() function) is row-major, since that is how people write matrices on paper.
Fields§
§x: Vec4<F>
§y: Vec4<F>
§z: Vec4<F>
§p: Vec4<F>
Implementations§
Source§impl<F: FullFloat> Mat4<F>
impl<F: FullFloat> Mat4<F>
Sourcepub fn new(
r0c0: F,
r0c1: F,
r0c2: F,
r0c3: F,
r1c0: F,
r1c1: F,
r1c2: F,
r1c3: F,
r2c0: F,
r2c1: F,
r2c2: F,
r2c3: F,
r3c0: F,
r3c1: F,
r3c2: F,
r3c3: F,
) -> Mat4<F>
pub fn new( r0c0: F, r0c1: F, r0c2: F, r0c3: F, r1c0: F, r1c1: F, r1c2: F, r1c3: F, r2c0: F, r2c1: F, r2c2: F, r2c3: F, r3c0: F, r3c1: F, r3c2: F, r3c3: F, ) -> Mat4<F>
Create a new 4x4 Matrix. Specify parameters in row-major order (as typically written on paper and in math texts)
pub fn from_cols(x: Vec4<F>, y: Vec4<F>, z: Vec4<F>, p: Vec4<F>) -> Mat4<F>
Source§impl<F: FullFloat> Mat4<F>
impl<F: FullFloat> Mat4<F>
pub fn from_components( x_dir: Direction3<F>, y_dir: Direction3<F>, z_dir: Direction3<F>, pos: Point3<F>, ) -> Mat4<F>
pub fn from_mat3(mat3: Mat3<F>, pos: Point3<F>) -> Mat4<F>
Source§impl<F: FullFloat> Mat4<F>
impl<F: FullFloat> Mat4<F>
pub fn from_angle_x(theta: Angle<F>) -> Mat4<F>
pub fn from_angle_y(theta: Angle<F>) -> Mat4<F>
pub fn from_angle_z(theta: Angle<F>) -> Mat4<F>
Source§impl<F: FullFloat> Mat4<F>
impl<F: FullFloat> Mat4<F>
pub fn rotate_axis_angle(axis: Direction3<F>, theta: Angle<F>) -> Mat4<F>
Source§impl<F: FullFloat> Mat4<F>
impl<F: FullFloat> Mat4<F>
pub fn get_x_scale(&self) -> F
pub fn get_y_scale(&self) -> F
pub fn get_z_scale(&self) -> F
Trait Implementations§
Source§impl<F: FullFloat> ApproxEq for Mat4<F>
impl<F: FullFloat> ApproxEq for Mat4<F>
type Flt = F
Source§fn approx_eq(
&self,
other: &Self,
epsilon: <F as ApproxEq>::Flt,
ulps: <<F as ApproxEq>::Flt as Ulps>::U,
) -> bool
fn approx_eq( &self, other: &Self, epsilon: <F as ApproxEq>::Flt, ulps: <<F as ApproxEq>::Flt as Ulps>::U, ) -> bool
This method tests for
self
and other
values to be approximately equal
using two methods: epsilon and ulps. If the values differ by less than the
given epsilon, they will be considered equal. If the values differ by more
than epsilon, but by less than the given ulps, they will also be considered
equal. Otherwise they are unequal. Read moreSource§fn approx_ne(
&self,
other: &Self,
epsilon: Self::Flt,
ulps: <Self::Flt as Ulps>::U,
) -> bool
fn approx_ne( &self, other: &Self, epsilon: Self::Flt, ulps: <Self::Flt as Ulps>::U, ) -> bool
This method tests for
self
and other
values to be not approximately equal
using two methods: epsilon and ulps. If the values differ by less than the
given epsilon, they will be considered equal. If the values differ by more
than epsilon, but by less than the given ulps, they will also be considered
equal. Otherwise they are unequal. Read moreSource§impl<'de, F> Deserialize<'de> for Mat4<F>where
F: Deserialize<'de>,
impl<'de, F> Deserialize<'de> for Mat4<F>where
F: Deserialize<'de>,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl<F: Copy> Copy for Mat4<F>
impl<F: Eq> Eq for Mat4<F>
impl<F> StructuralPartialEq for Mat4<F>
Auto Trait Implementations§
impl<F> Freeze for Mat4<F>where
F: Freeze,
impl<F> RefUnwindSafe for Mat4<F>where
F: RefUnwindSafe,
impl<F> Send for Mat4<F>where
F: Send,
impl<F> Sync for Mat4<F>where
F: Sync,
impl<F> Unpin for Mat4<F>where
F: Unpin,
impl<F> UnwindSafe for Mat4<F>where
F: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more