Add inverse(bone_transform)
This commit is contained in:
parent
4dcd85021e
commit
b724b8d68a
1 changed files with 10 additions and 0 deletions
|
|
@ -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)};
|
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>
|
template <typename T>
|
||||||
bone_transform<T> lerp(bone_transform<T> const & m1, bone_transform<T> const & m2, T t)
|
bone_transform<T> lerp(bone_transform<T> const & m1, bone_transform<T> const & m2, T t)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue