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>) -> Self
pub fn new(joints: Vec<Joint>) -> Self
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: &[Mat4], out: &mut Vec<Mat4>)
pub fn world_matrices_into(&self, local_poses: &[Mat4], out: &mut Vec<Mat4>)
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: &[Mat4], out: &mut Vec<Mat4>)
pub fn skinning_matrices_into(&self, local_poses: &[Mat4], out: &mut Vec<Mat4>)
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<Mat4> ⓘ
pub fn bind_skinning_matrices(&self) -> Vec<Mat4> ⓘ
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) -> &[Mat4] ⓘ
pub fn bind_locals(&self) -> &[Mat4] ⓘ
The local bind matrix of every joint, in joint order. A pose sample seeds its output with these before applying the clip’s tracks.