17 #include <glm/glm.hpp>
18 #include <glm/gtc/quaternion.hpp>
23 explicit AnimPose(
const glm::mat4& mat);
25 explicit AnimPose(
const glm::quat& rotIn) : _scale(1.0f), _rot(rotIn), _trans(0.0f) {}
26 AnimPose(
const glm::quat& rotIn,
const glm::vec3& transIn) : _scale(1.0f), _rot(rotIn), _trans(transIn) {}
27 AnimPose(
const glm::vec3& scaleIn,
const glm::quat& rotIn,
const glm::vec3& transIn) : _scale(scaleIn), _rot(rotIn), _trans(transIn) {}
29 static const AnimPose identity;
31 glm::vec3 xformPoint(
const glm::vec3& rhs)
const;
32 glm::vec3 xformVector(
const glm::vec3& rhs)
const;
33 glm::vec3 xformVectorFast(
const glm::vec3& rhs)
const;
35 glm::vec3 operator*(
const glm::vec3& rhs)
const;
36 AnimPose operator*(
const AnimPose& rhs)
const;
38 AnimPose inverse()
const;
39 AnimPose mirror()
const;
40 operator glm::mat4()
const;
42 const glm::vec3& scale()
const {
return _scale; }
43 glm::vec3& scale() {
return _scale; }
45 const glm::quat& rot()
const {
return _rot; }
46 glm::quat& rot() {
return _rot; }
48 const glm::vec3& trans()
const {
return _trans; }
49 glm::vec3& trans() {
return _trans; }
51 void blend(
const AnimPose& srcPose,
float alpha);
54 friend QDebug operator<<(QDebug debug,
const AnimPose& pose);
55 glm::vec3 _scale { 1.0f };
60 inline QDebug operator<<(QDebug debug,
const AnimPose& pose) {
61 debug <<
"AnimPose, trans = (" << pose.trans().x << pose.trans().y << pose.trans().z <<
"), rot = (" << pose.rot().x << pose.rot().y << pose.rot().z << pose.rot().w <<
"), scale = (" << pose.scale().x << pose.scale().y << pose.scale().z <<
")";
65 using AnimPoseVec = std::vector<AnimPose>;