150 4. 3D Math for Games
These three cross products defi ne the direction of positive rotations about the
Cartesian axes. The positive rotations go from x to y (about z), from y to z
(about x) and from z to x (about y). Notice how the rotation about the y-axis
“reversed” alphabetically, in that it goes from z to x (not from x to z). As we’ll
see below, this gives us a hint as to why the matrix for rotation about the y-axis
looks inverted when compared to the matrices for rotation about the x- and
z-axes.
The Cross Product in Action
The cross product has a number of applications in games. One of its most
common uses is for fi nding a vector that is perpendicular to two other vectors.
As we’ll see in Section 4.3.10.2, if we know an object’s local unit basis vectors,
(ilocal , jlocal , and klocal), we can easily fi nd a matrix representing the object’s
orientation. Let’s assume that all we know is the object’s klocal vector—i.e., the
direction in which the object is facing. If we assume that the object has no roll
about klocal , then we can fi nd ilocal by taking the cross product between klocal
(which we already know) and the world-space up vector jworld (which equals
[0 1 0]). We do so as follows: ilocal = normalize(jworld × klocal). We can then fi nd
jlocal by simply crossing ilocal and klocal as follows: jlocal = klocal × ilocal.
A very similar technique can be used to fi nd a unit vector normal to the
surface of a triangle or some other plane. Given three points on the plane P1 ,
P2 , and P3 , the normal vector is just n = normalize[(P 2 – P 1 ) × (P 3 – P 1 )].
Cross products are also used in physics simulations. When a force is ap-
plied to an object, it will give rise to rotational motion if and only if it is ap-
plied off -center. This rotational force is known as a torque , and it is calculated
as follows. Given a force F, and a vector r from the center of mass to the point
at which the force is applied, the torque N = r × F.
4.2.5. Linear Interpolation of Points and Vectors
In games, we oft en need to fi nd a vector that is midway between two known
vectors. For example, if we want to smoothly animate an object from point A
to point B over the course of two seconds at 30 frames per second, we would
need to fi nd 60 intermediate positions between A and B.
A linear interpolation is a simple mathematical operation that fi nds an in-
termediate point between two known points. The name of this operation is
oft en shortened to LERP. The operation is defi ned as follows, where β ranges
from 0 to 1 inclusive:
( , , ) (1 )
[(1 )ABxxyyzz, (1 )AB, (1 )AB].
= β = −β +β
= −β +β −β +β −β +β