27 m_matrix_palette(
skeleton.get_bone_count())
45 m_matrix_palette.begin() + first_index,
46 m_matrix_palette.begin() + (first_index + bone_count),
47 [&](
auto& skinning_matrix)
49 const bone_index_type bone_index = static_cast<bone_index_type>(&skinning_matrix - m_matrix_palette.data());
50 skinning_matrix = (m_absolute_transforms[bone_index] * rest_pose.get_inverse_absolute_transform(bone_index)).matrix();
72 [&](
auto& relative_transform)
74 const bone_index_type bone_index = static_cast<bone_index_type>(&relative_transform - m_relative_transforms.data());
76 relative_transform = rest_pose.get_relative_transform(bone_index);
77 m_absolute_transforms[bone_index] = rest_pose.get_absolute_transform(bone_index);
78 m_matrix_palette[bone_index] = bone_matrix_type::identity();
std::uint16_t bone_index_type
Bone index type.
void update()
Updates the pose after one or more relative transforms have been changed.
void reset()
Resets the animation pose to the skeleton's rest pose.
animation_pose() noexcept=default
Constructs an empty animation pose.
Base class for skeleton poses.
void update()
Updates the pose after one or more relative transforms have been changed.
const skeleton * m_skeleton
Skeleton with which the pose is associated.
std::vector< bone_transform_type > m_relative_transforms
Relative ransforms for each bone in a skeleton.
Skeletal animation skeleton.
const rest_pose & get_rest_pose() const noexcept
Returns the skeleton's rest pose.