Struct vek::transform::repr_simd::Transform [−][src]
pub struct Transform<P, O, S> {
pub position: Vec3<P>,
pub orientation: Quaternion<O>,
pub scale: Vec3<S>,
}
Expand description
A convenient position + orientation + scale container, backed by two Vec3
and a Quaternion.
It can be easily interpolated and converted to a Mat4
of any layout.
let (p, rz, s) = (Vec3::unit_x(), 3.0_f32, 5.0_f32);
let a = Mat4::scaling_3d(s).rotated_z(rz).translated_3d(p);
let b = Mat4::from(Transform {
position: p,
orientation: Quaternion::rotation_z(rz),
scale: Vec3::broadcast(s),
});
assert_relative_eq!(a, b);
Fields
position: Vec3<P>
Local position.
orientation: Quaternion<O>
Local orientation; It is not named rotation
because rotation
denotes an
operation, but not a current state.
scale: Vec3<S>
Local scale.
Trait Implementations
The default Transform
has a zero position, identity orientation and unit scale.
let a = Transform {
position: Vec3::<f32>::zero(),
orientation: Quaternion::<f32>::identity(),
scale: Vec3::<f32>::one(),
};
assert_eq!(a, Transform::default());
impl<'de, P, O, S> Deserialize<'de> for Transform<P, O, S> where
P: Deserialize<'de>,
O: Deserialize<'de>,
S: Deserialize<'de>,
impl<'de, P, O, S> Deserialize<'de> for Transform<P, O, S> where
P: Deserialize<'de>,
O: Deserialize<'de>,
S: Deserialize<'de>,
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
A Mat4
can be obtained from a Transform
, by rotating, then scaling, then
translating.
A Mat4
can be obtained from a Transform
, by rotating, then scaling, then
translating.
LERP on a Transform
is defined as LERP-ing between the positions and scales,
and performing SLERP between the orientations.
type Output = Self
type Output = Self
The resulting type after performing the LERP operation.
Returns the linear interpolation of from
to to
with factor
unconstrained,
using the supposedly fastest but less precise implementation. Read more
Returns the linear interpolation of from
to to
with factor
unconstrained,
using a possibly slower but more precise operation. Read more
fn lerp_unclamped_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output
fn lerp_unclamped_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output
Version of lerp_unclamped()
that used a single RangeInclusive
parameter instead of two values.
fn lerp_unclamped_precise_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output
fn lerp_unclamped_precise_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output
Version of lerp_unclamped_precise()
that used a single RangeInclusive
parameter instead of two values.
Alias to lerp_unclamped
which constrains factor
to be between 0 and 1
(inclusive). Read more
fn lerp_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output where
Factor: Clamp + Zero + One,
fn lerp_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output where
Factor: Clamp + Zero + One,
Version of lerp()
that used a single RangeInclusive
parameter instead of two values.
Alias to lerp_unclamped_precise
which constrains factor
to be between 0 and 1
(inclusive). Read more
fn lerp_precise_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output where
Factor: Clamp + Zero + One,
fn lerp_precise_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output where
Factor: Clamp + Zero + One,
Version of lerp_precise()
that used a single RangeInclusive
parameter instead of two values.
LERP on a Transform
is defined as LERP-ing between the positions and scales,
and performing SLERP between the orientations.
Returns the linear interpolation of from
to to
with factor
unconstrained,
using the supposedly fastest but less precise implementation. Read more
Returns the linear interpolation of from
to to
with factor
unconstrained,
using a possibly slower but more precise operation. Read more
fn lerp_unclamped_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output
fn lerp_unclamped_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output
Version of lerp_unclamped()
that used a single RangeInclusive
parameter instead of two values.
fn lerp_unclamped_precise_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output
fn lerp_unclamped_precise_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output
Version of lerp_unclamped_precise()
that used a single RangeInclusive
parameter instead of two values.
Alias to lerp_unclamped
which constrains factor
to be between 0 and 1
(inclusive). Read more
fn lerp_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output where
Factor: Clamp + Zero + One,
fn lerp_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output where
Factor: Clamp + Zero + One,
Version of lerp()
that used a single RangeInclusive
parameter instead of two values.
Alias to lerp_unclamped_precise
which constrains factor
to be between 0 and 1
(inclusive). Read more
fn lerp_precise_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output where
Factor: Clamp + Zero + One,
fn lerp_precise_inclusive_range(
range: RangeInclusive<Self>,
factor: Factor
) -> Self::Output where
Factor: Clamp + Zero + One,
Version of lerp_precise()
that used a single RangeInclusive
parameter instead of two values.
Auto Trait Implementations
impl<P, O, S> RefUnwindSafe for Transform<P, O, S> where
O: RefUnwindSafe,
P: RefUnwindSafe,
S: RefUnwindSafe,
impl<P, O, S> UnwindSafe for Transform<P, O, S> where
O: UnwindSafe,
P: UnwindSafe,
S: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more