Game Development Reference
In-Depth Information
Because we only check for collisions at the end of each frame, objects may have
already passed into one another. So, second, we need to resolve any interpenetration
that has occurred. The interpenetration can be handled in a very similar way to inter-
penetration for particles. But the impulse calculations we need to do anyway allow us
to derive a more physically realistic interpenetration resolution. We'll return to this
process in section 14.3
14.2
C OLLISION I MPULSES
To resolve the relative motion of the two objects we need to calculate four impulses:
linear and angular impulses for each object. If there is only one object involved in
the collision (if an object is colliding with an immovable object, such as the ground),
then we need only two values: the impulse and impulsive torque for the single object.
To calculate the impulse and impulsive force on each object we go through a series
of steps:
1. We work in a set of coordinates that are relative to the contact. This makes much
of the mathematics a lot simpler. We create a transform matrix to convert into
and out of this new set of coordinates.
2. We work out the change in velocity of the contact point on each object per unit
impulse. Because the impulse will cause linear and angular motion, this value
needs to take account of both components.
3. We will know the velocity change we want to see (in the next step), so we invert
the result of the last stage to find the impulse needed to generate any given velocity
change.
4. We work out what the separating velocity at the contact point should be, what
the closing velocity currently is, and the difference between the two. This is the
desired change in velocity.
5. From the desired change in velocity we can calculate the impulse that must be
generated.
6. We split the impulse into its linear and angular components and apply them to
each object.
Let's look at each of these stages in turn.
14.2.1
C HANGE TO C ONTACT C OORDINATES
Our goal is to work out what impulse we need to apply as a result of the collision.
The impulse will generate a change in velocity, and we need to find the impulse that
generates the change in velocity we are looking for.
We are not interested in the linear and angular velocity of the whole object at this
stage. For the purpose of the collision we are only interested in the separating velocity