Store a Transform in keyframes instead of a Matrix
authorMikko Rasa <tdb@tdb.fi>
Tue, 4 Jun 2019 14:13:59 +0000 (17:13 +0300)
committerMikko Rasa <tdb@tdb.fi>
Tue, 4 Jun 2019 14:13:59 +0000 (17:13 +0300)
This is the first step towards curve-based animations and finer control
over which values are animated.

source/keyframe.cpp
source/keyframe.h

index 708fa22bc338e25a478ec11ccc969eccccf37589..8eba17292368a33b576a0ae0186ee9388aacaa6b 100644 (file)
@@ -1,7 +1,6 @@
 #include <msp/datafile/collection.h>
 #include "keyframe.h"
 #include "pose.h"
-#include "transform.h"
 
 using namespace std;
 
@@ -15,9 +14,14 @@ KeyFrame::KeyFrame()
 KeyFrame::~KeyFrame()
 { }
 
+void KeyFrame::set_transform(const Transform &t)
+{
+       transform = t;
+}
+
 void KeyFrame::set_matrix(const Matrix &m)
 {
-       matrix = m;
+       transform = Transform::from_matrix(m);
 }
 
 void KeyFrame::set_pose(const Pose &p)
@@ -78,29 +82,27 @@ void KeyFrame::Loader::pose_inline()
 
 void KeyFrame::Loader::position(float x, float y, float z)
 {
-       obj.matrix.translate(x, y, z);
+       obj.transform.set_position(Vector3(x, y, z));
 }
 
 void KeyFrame::Loader::rotation(float a, float x, float y, float z)
 {
-       obj.matrix.rotate_deg(a, x, y, z);
+       obj.transform.set_rotation(Transform::Angle::from_degrees(a), Vector3(x, y, z));
 }
 
 void KeyFrame::Loader::scaling_uniform(float s)
 {
-       obj.matrix.scale(s);
+       obj.transform.set_scale(s);
 }
 
 void KeyFrame::Loader::scaling(float x, float y, float z)
 {
-       obj.matrix.scale(x, y, z);
+       obj.transform.set_scale(Vector3(x, y, z));
 }
 
 void KeyFrame::Loader::transform()
 {
-       Transform trn;
-       load_sub(trn);
-       obj.matrix = trn.to_matrix();
+       load_sub(obj.transform);
 }
 
 void KeyFrame::Loader::uniforms()
index 88e852149570cae1d6e32968a60d73ed9cd6a5b5..4b985ca7e56dfb0d5248132cd9ff7b17d287e9f2 100644 (file)
@@ -4,6 +4,7 @@
 #include <msp/core/refptr.h>
 #include <msp/datafile/objectloader.h>
 #include "matrix.h"
+#include "transform.h"
 
 namespace Msp {
 namespace GL {
@@ -57,7 +58,7 @@ public:
        typedef std::map<std::string, AnimatedUniform> UniformMap;
 
 private:
-       Matrix matrix;
+       Transform transform;
        UniformMap uniforms;
        RefPtr<const Pose> pose;
 
@@ -65,9 +66,11 @@ public:
        KeyFrame();
        ~KeyFrame();
 
+       void set_transform(const Transform &);
        void set_matrix(const Matrix &);
        void set_pose(const Pose &);
-       const Matrix &get_matrix() const { return matrix; }
+       const Transform &get_transform() const { return transform; }
+       Matrix get_matrix() const { return transform.to_matrix(); }
        const UniformMap &get_uniforms() const { return uniforms; }
        const Pose *get_pose() const { return pose.get(); }
 };