Game Development Reference
In-Depth Information
Virtually every computer graphics book that we've read contains a chapter or section
on using rotation matrices. Far fewer discuss quaternions, but if you're familiar with
quaternions, it's probably in the same context as rotation matrices—that is, how they
are used to rotate 3D points, objects, scenes, and points of view. In a simulation, however,
you need to get a little more out of rotation matrices or quaternions and will use them
in a different context than what you might be accustomed to. Specifically, you need to
keep track of a body's orientation in space and, moreover, the change in orientation over
time. So it's in this light that we'll discuss rotation matrices and quaternions. We'll try
to be as concise as possible so as not to cloud the water with the proofs and derivations
that you can find in the texts referred to in the Bibliography .
Rotation Matrices
A rotation matrix is a 3×3 matrix that, when multiplied with a point or vector, results
in the rotation of that point about some axis, yielding a new set of coordinates. You can
rotate points about axes in one coordinate system or you can use rotation matrices to
convert points from one coordinate system to another, where one is rotated relative to
the other.
Rotating a vector by a rotation matrix is typically written as follows: if v is a vector, and
R is a rotation matrix, then v ' is v rotated by R according to the formula:
v ' = R v
You can combine multiple rotation matrices reflecting multiple sequential rotations into
a single rotation matrix using usual matrix multiplication. If the rotation matrices are
expressed in terms of fixed, global coordinates, then they are combined as follows:
R c = R 1 R 2
Here R c is the combined rotation matrix reflecting a rotation first by R 1 and then by R 2 .
If the rotation matrices are expressed in terms of rotating, body-fixed coordinates, then
they are combined in the reverse order as follows:
R c = R 2 R 1
We won't go into the proof of this relation, but the reason it's different depending on
how you've defined your rotation matrices is that rotation matrices defined in fixed
coordinates are unaffected by the rotation itself since the coordinate axes stay fixed. On
the other hand, if the rotation matrices are defined relative to a coordinate system that
is rotating due to sequential application of rotation matrices, then all rotation matrices
after the first will be affected since they were first defined relative to the original state
of the coordinate system—that is, before the first rotation matrix was applied. This
means that the subsequent rotation matrices must be corrected to reflect the new system