Game Development Reference

In-Depth Information

resentation of orientation isn't simple. Unlike for the two-dimensional case, we have

more than just the bounds to worry about: it isn't clear how to combine rotations

easily because the axis as well as the angle need to change.

Until a few years ago the most common way to represent orientations went to the

opposite extreme. Rather than use three values, a 3

×

3 matrix was used.

9.2.3

R
OTATION
M
ATRICES

If we were interested in the mathematics of combining rotations, then we could bor-

row from 3D geometry and represent orientations with a rotation matrix. In games

we regularly use matrices to represent rotations. In fact the chances are that whatever

representation we use, we'll have to turn it into a rotation matrix and send it to the

rendering engine in order to draw the object. Why not save the effort and use the

rotation matrix from the start?

Using rotation matrices is a good solution; and we can represent any rotation with

a rotation matrix. The elements of the matrix are

⎡

⎤

tx
2

+

ctxy

+

sz txz

−

sy

⎣

⎦

Θ

=

txy

−

sz ty
2

+

ctyz

+

sx

[9.3]

sx tz
2

txz

+

sy tyz

−

+

x

where

⎡

⎣

⎤

⎦

x

y

z

is the axis;
c

cos
θ
;and
θ
is the angle.

Because the elements are related to the sine and cosine of the angle rather than

to the angles themselves, we don't have to do any bounds-checking. Combining two

rotations is simply a matter of multiplying the two matrices together.

The downside with using rotation matrices is their excess degrees of freedom.

We are representing a three-degree-of-freedom system with nine numbers. Floating-

point arithmetic in the computer isn't totally accurate. So to make sure the matrix

represents a rotation (as opposed to some other kind of transformation such as a

skew or even a mirror image) after it has been manipulated in some way, we need

to adjust its values periodically. With so many degrees of freedom this adjustment

processneedstotakeplacemoreoftenthanwe'dlike,anditisn'tatrivialprocessas

normalizing a vector is.

Ideally we'd like a representation that has the advantages of matrices: a straightfor-

ward combination of rotations, no bounds-checking, and fewer degrees of freedom.

The solution, now almost ubiquitous, is to use a mathematical structure called a

“quaternion.”

=

cos
θ
,
s

=

sin
θ
,and
t

=

1

−