For each animation that we wish to execute, we usually obtain the details from a resource file. This contains the transformation information for the skeleton's bones. We can thus apply this prior to using our vertex shader.
This information consists of a number of positions and orientations for certain bones in the skeleton, organized in animation sequences. Generally, we define just the minimum number of positions, so that we can fill in the positions in between using interpolation. The positions we define are referred to as key frames, and much as with 2D animations, they form the key points in an animation sequence, such as the beginning and the end of a particular motion of a limb. This is also referred to as pose-to-pose animation.
As for the way to define a key frame, there's really not much to it:
typedef struct { uint32_t time; float angle[MAX_BONECOUNT]; float length[MAX_BONECOUNT]; } Keyframe;