Add bone_transform * vector and * point

This commit is contained in:
Nikita Lisitsa 2021-08-12 21:04:30 +03:00
parent df59cffd43
commit 4dcd85021e

View file

@ -1,6 +1,7 @@
#pragma once
#include <psemek/geom/vector.hpp>
#include <psemek/geom/point.hpp>
#include <psemek/geom/quaternion.hpp>
#include <psemek/geom/matrix.hpp>
#include <psemek/geom/affine_transform.hpp>
@ -84,6 +85,18 @@ namespace psemek::gfx
return {geom::slerp(m1.rotation, m2.rotation, t), std::exp(geom::lerp(std::log(m1.scale), std::log(m2.scale), t)), geom::lerp(m1.translation, m2.translation, t)};
}
template <typename T>
geom::vector<T, 3> operator * (bone_transform<T> const & m, geom::vector<T, 3> const & v)
{
return m.translation + m.scale * geom::rotate(m.rotation, v);
}
template <typename T>
geom::point<T, 3> operator * (bone_transform<T> const & m, geom::point<T, 3> const & p)
{
return p.zero() + m * (p - p.zero());
}
template <typename T>
using pose = std::vector<bone_transform<T>>;