Game Development Reference
In-Depth Information
the relationships between them remain the same as for linear velocity and accelera-
tion. In particular we can update the angular velocity using the equation
θ
= θ
+ θ t
where θ is the angular acceleration and θ is the angular velocity, as before.
9.4
I MPLEMENTING THE M ATHEMATICS
We've covered the theory. Now it's time to implement functions and data structures
that are capable of performing the right mathematics. In chapter 2 we created a Vec-
tor3 class that encapsulated vector mathematics; we'll now do the same thing for
matrices and quaternions. As part of this process I'll introduce the mathematics of
many operations for each type.
If you are working with an existing rendering library, you may already have ma-
trix, vector, and quaternion classes implemented. There is nothing physics-specific in
the implementations I give here. You should be able to use your own implementations
without alteration. I've personally worked with the DirectX utility library implemen-
tations on many projects without having to make any changes to the rest of the physics
code.
9.4.1
T HE M ATRIX C LASSES
A matrix is a rectangular array of scalar values. They don't have the same obvious
geometric interpretation as vectors do. We will use them in several different contexts,
but in each case they will be used to change (or “transform”) vectors.
Although matrices can be any size, with any number of rows and columns, we are
primarily interested in two kinds: 3
4 matrices. To implement
matrices we could create a general matrix data structure capable of supporting any
number of rows and columns. We could implement matrix mathematics in the most
general way, and use the same code for both of our matrix types (and other types
of matrix we might need later). While this would be an acceptable strategy, having
the extra flexibility is difficult to optimize. It would be better to create specific data
structures for the types of matrix we need. This will be our approach.
×
3matricesand3
×
×
3 matrices and one called
Matrix4 for 3
4matrices.
The basic data structure for Matrix3 looks like this:
Excerpt from include/cyclone/core.h
×
/**
* Holds an inertia tensor, consisting of a 3x3 row-major matrix.
* This matrix is not padding to produce an aligned structure, since
* it is most commonly used with a mass (single real) and two
* damping coefficients to make the 12-element characteristics array