Add inverse(bone_transform)

This commit is contained in:
Nikita Lisitsa 2021-08-12 21:51:11 +03:00
parent 4dcd85021e
commit b724b8d68a

View file

@ -79,6 +79,16 @@ namespace psemek::gfx
return bone_transform<T>{m1.rotation * m2.rotation, m1.scale * m2.scale, m1.translation + m1.scale * geom::rotate(m1.rotation, m2.translation)};
}
template <typename T>
bone_transform<T> inverse(bone_transform<T> const & m)
{
// [(1, T) * (S, 0) * (R, 0)]^-1 = (R^-1, 0) * (S^-1, 0) * (1, -T) =
// = (1, - R^-1 S^-1 T) * (S^-1, 0) * (R^-1, 0)
auto ir = geom::inverse(m.rotation);
return bone_transform<T>{ir, T{1} / m.scale, - geom::rotate(ir, m.translation) / m.scale};
}
template <typename T>
bone_transform<T> lerp(bone_transform<T> const & m1, bone_transform<T> const & m2, T t)
{