namespace Msp {
namespace GL {
+class Armature;
class KeyFrame;
class Matrix;
+class Pose;
/**
An Animation is a sequence of KeyFrames combined with timing information. The
float scale;
AxisInterpolation();
+ AxisInterpolation(const float *, const float *);
+ };
+
+ struct MatrixInterpolation
+ {
+ const Matrix *matrix1;
+ const Matrix *matrix2;
+ AxisInterpolation axes[3];
+
+ MatrixInterpolation();
+ MatrixInterpolation(const Matrix &, const Matrix &);
+
+ Matrix get(float) const;
};
struct TimedKeyFrame
{
+ const Animation &animation;
const TimedKeyFrame *prev;
Time::TimeDelta time;
Time::TimeDelta delta_t;
RefPtr<const KeyFrame> keyframe;
- AxisInterpolation axes[3];
+ MatrixInterpolation matrix;
+ std::vector<MatrixInterpolation> pose_matrices;
+
+ TimedKeyFrame(const Animation &);
+ void prepare();
};
typedef std::list<TimedKeyFrame> KeyFrameList;
bool is_end() const { return end; }
Matrix get_matrix() const;
+ Matrix get_pose_matrix(unsigned) const;
};
private:
+ const Armature *armature;
KeyFrameList keyframes;
bool looping;
public:
Animation();
+ ~Animation();
+
+ void set_armature(const Armature &);
+ const Armature *get_armature() const { return armature; }
void add_keyframe(const Time::TimeDelta &, const KeyFrame &);
- void set_looping(bool);
private:
void prepare_keyframe(TimedKeyFrame &);
- Matrix compute_matrix(const TimedKeyFrame &, const Time::TimeDelta &) const;
+public:
+ void set_looping(bool);
};
} // namespace GL