Game Development Reference
To apply this rotation we use equation 9.8, via the quaternion function updateByVec-
tor that we defined earlier.
A VOIDING E XCESSIVE R OTATION
There are two issues to address with the algorithm presented so far. The first is an
assumption that slipped in without being commented on, and the second is a poten-
tial problem that can cause instability and odd-looking behavior. Both are related to
objects being rotated too much as they are moved out of penetration.
Figure 14.8 shows an object that has been severely interpenetrated. If the moment
of inertia of the object is small but its mass is large, then most of the extraction will
be down to angular movement. Clearly, no matter how much angular movement is
imposed, the contact point will never get out of the object. The example is extreme,
of course, but the problem is very real.
The instant an object begins rotating from an impulsive torque, the contact point
will also begin to move. We have assumed that we can take the instantaneous change
in position of the contact point (i.e., its velocity) and use that to work out how much
rotation is needed. Making this assumption means that there will always be a solution
for how much rotation to apply, even in cases where no solution really exists (such as
in figure 14.8).
In effect we have assumed that the contact point would continue to move in its
initial direction forever at the same rate. Clearly this is a wrong assumption: the con-
tact point would change its direction of motion as it rotates around the center of mass.
For small rotations the assumption is quite good. And we hope that most interpene-
trations aren't too large.
For large rotations we have another problem, however. We have the possibility
that we might rotate the object so far that the contact point will start to get closer
F IGURE 14.8
Angular motion cannot resolve the interpenetration.