Game Development Reference

In-Depth Information

Here,
invmass1
and
invmass2
are the numerical inverses of the two masses.

If we want a particle to be immovable, simply set
invmass
=0for that particle

(corresponding to an infinite mass). Of course, in the above case, the square root

can also be approximated for a speed-up.

11.4 Rigid Bodies

The equations governing motion of rigid bodies were discovered long before the

invention of modern computers. To be able to say anything useful at that time,

mathematicians needed the ability to manipulate expressions symbolically. In the

theory of rigid bodies, this led to useful notions and tools such as inertia tensors,

angular momentum, torque, quaternions for representing orientations, etc. How-

ever, with the current ability to process huge amounts of data numerically, it has

become feasible and in some cases even advantageous to break down calculations

to simpler elements when running a simulation. In the case of three-dimensional

rigid bodies, this could mean modeling a rigid body by four particles and six con-

straints (giving the correct amount of degrees of freedom, 4

×

3

−

6=6). This

simplifies many things.

Consider a tetrahedron and place a particle at each of its four vertices. In

addition, for each of the tetrahedron's six edges, create a distance constraint like

the stick constraint discussed in the previous section. This configuration suffices

to simulate a rigid body. The tetrahedron can be let loose inside the cube world

from earlier, and the Verlet integrator will then move it correctly. The function

SatisfyConstraints()
should take care of two things: (1) that particles

are kept inside the cube (like previously) and (2) that the six distance constraints

are satisfied. Again, this can be done using the relaxation approach; three or four

iterations should be enough with optional square root approximation.

Inside the cube world, collisions are handled simply by moving offending

particles (those placed at the tetrahedron vertices) such that they do not intersect

with obstacles. In a more complex setting than the cube world, however, the sides

of the tetrahedron may also intersect with obstacles without the particles at the

vertices themselves being in invalid positions (see
Figure 11.2
).

In this case, the vertex particles of the tetrahedron, which describe the posi-

tion of the rigid body, must be moved proportionally to how near they are to the

actual point of collision. If, for example, a collision occurs exactly halfway be-

tween particles
x
1
and
x
2
, then both these particles should both be moved by the

same amount along the collision surface normal until the collision point (which

is halfway between the two particles) has been moved out of the obstacle (see

Figures 11.3
a
nd
11.4
)
.