Cal3d is an excellent skeleton-drive-animation engine. It supports: skeleton-drived-mesh, motion blending, maybe some springsystem which is not so powerful as the former 2.
In this framework, the skeleton is like a tree construct whoes tree-node is bone. Animation is represented by tracks , each bone has a track(recording the local position and orientation of the bone on the time line), which is assembled by frames.
It uses weight to do the linear blending. Each time, skeleton posture is reset in the update function which take the elapsed time as a parameter. Mesh is recalculated according to the updated posture in the rendering callback function.
Those who use cal3d must be careful in the rotation. it's a left-hand-rotation. As most of the other engine do, cal3d use a quaternions to represent the rotations. we should take care that: in this coordinates, quaternion multiply (q1*q2) means a rotation q1 followed by another rotation q2.
Appendix : I will update this article if time permits. Since some oversight is unavoidable, It will be highly appreciated if u can point out any mistake for me . Any discussion is also welcome.