pub struct Skeleton { /* private fields */ }Expand description
A joint hierarchy plus the bind pose. The inverse bind matrices are precomputed once on construction.
Implementations§
Source§impl Skeleton
impl Skeleton
Sourcepub fn new(joints: Vec<Joint>) -> Skeleton
pub fn new(joints: Vec<Joint>) -> Skeleton
Build a skeleton, resolving world bind matrices and inverting them. Joints referencing a parent that does not precede them are treated as roots (a forward pass cannot resolve them otherwise).
Sourcepub fn joint_index(&self, name: &str) -> Option<usize>
pub fn joint_index(&self, name: &str) -> Option<usize>
Index of the joint with the given authored name, or None. Load-time
lookup for by-name joint references (IK chains); linear scan is fine.
Sourcepub fn bind_position(&self, joint: usize) -> [f32; 3]
pub fn bind_position(&self, joint: usize) -> [f32; 3]
World-space bind position of one joint.
Sourcepub fn world_matrices_into(
&self,
local_poses: &[[[f32; 4]; 4]],
out: &mut Vec<[[f32; 4]; 4]>,
)
pub fn world_matrices_into( &self, local_poses: &[[[f32; 4]; 4]], out: &mut Vec<[[f32; 4]; 4]>, )
Compose local_poses (one local matrix per joint) into mesh-space
joint matrices with a single forward pass over the hierarchy, written
into out (cleared first, so its capacity is reused). local_poses
shorter than the skeleton has its missing tail filled from the bind
pose.
Sourcepub fn skinning_matrices_into(
&self,
local_poses: &[[[f32; 4]; 4]],
out: &mut Vec<[[f32; 4]; 4]>,
)
pub fn skinning_matrices_into( &self, local_poses: &[[[f32; 4]; 4]], out: &mut Vec<[[f32; 4]; 4]>, )
Compose local_poses into world-space joint matrices, then multiply
by the inverse bind matrices to produce the skinning matrices the
vertex shader applies, written into out (cleared first, so its
capacity is reused). local_poses must not alias out.
The result is capped at MAX_JOINTS entries (the GPU joint buffer is
fixed-size) and is always at least one matrix so the buffer is never
empty.
Sourcepub fn bind_skinning_matrices(&self) -> Vec<[[f32; 4]; 4]>
pub fn bind_skinning_matrices(&self) -> Vec<[[f32; 4]; 4]>
Skinning matrices for the rest (bind) pose: every joint’s local
transform is its bind transform, so every skinning matrix is identity.
Used to seed a SkeletonPose before the first animation tick.
Sourcepub fn bind_locals(&self) -> &[[[f32; 4]; 4]]
pub fn bind_locals(&self) -> &[[[f32; 4]; 4]]
The local bind matrix of every joint, in joint order. A pose sample seeds its output with these before applying the clip’s tracks.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Skeleton
impl RefUnwindSafe for Skeleton
impl Send for Skeleton
impl Sync for Skeleton
impl Unpin for Skeleton
impl UnsafeUnpin for Skeleton
impl UnwindSafe for Skeleton
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more