morphing problem


Playing back keyframed animation and morphing between keyframes doesn’t work well for me.

When playing back keyframed animations, keyframes are set in order. These keyframes contain translation and rotation information of objects.

Let’s suppose we want to make the smoothest animation possible so we have >MORPHING<
between keyframes. Keyframes set individually display OK. Translation morphing is OK, rotation is not always OK( it twists ). All the keyframes have the same number of polygons, same orientation, same attributes saved per object. What’s the problem, then? -> The user of a 3D package can set the rotation of an object arbitrarily. The useful range is [ 0 … 360 ] but any value is allowed. The values are clamped and wrapped to this interval when displaying, however big or small they are.
When you have a keyframe and you set the rotation it doesn’t really matter if you write -2 or 358 degrees. Similarly, 2 degress is the same is 362. When morphing, these degrees are NOT the same. Morphing between -2 and 5 is not the same as morping between 358 and 5. In the first case, a rotation occurs clockwise and in the second case a rotation occurs counter-clockwise. The result? The object “twists”. This problem is present in Maya, for example, because the rotation of joints is constrained to the [ -180 … 180 ] interval.

How can this problem circumvented? Am I doing something wrong( Dont think so… )?
Have you bumped into this problem?

Thanks for your help,


How do you store and interpolate between your various rotation keyframes?

Simply interpolating between two sets of (x,y,z)-values is not good, and gives rise to a number of situations where the rotation behaves badly.

You might consider using quaternions. Try taking a look at

Thanks, good docs. This is the solution