Creating the TransformTrack class
For any animated transform, you don't want to maintain separate vector and quaternion tracks; instead, you build a higher-level structure—the transform track. A transform track encapsulates three tracks—one for the position, one for the rotation, and one for scale. You can sample the transform track at any point and get a full transform back, even if the component tracks are of different durations or start at different times.
One thing to consider is how you want to store these transform tracks in relation to an animated model. The skeleton of a model contains several bones. You can either store a vector of transform tracks—one for each bone—or you can add bone ID as a member of the transform track and only store as many as are needed.
This is important because a character can have a lot of bones, but not all animations will animate all of those bones. If you store one transform track for each bone, it wastes...