A game is a mathematical model of a virtual world simulated in real time
on a computer of some kind. Therefore, mathematics pervades everything we do in the game industry. Game programmers make use of virtually all branches of mathematics, from trigonometry to algebra to statistics to
calculus. However, by far the most prevalent kind of mathematics you’ll be
doing as a game programmer is 3D vector and matrix math (i.e., 3D linear
algebra).
Even this one branch of mathematics is very broad and very deep, so we
cannot hope to cover it in any great depth in a single chapter. Instead, I will
attempt to provide an overview of the mathematical tools needed by a typical game programmer. Along the way, I’ll offer some tips and tricks, which
should help you keep all of the rather confusing concepts and rules straight in
your head. For an excellent in-depth coverage of 3D math for games, I highly
recommend Eric Lengyel’s book on the topic [28].
4.1 Solving 3D Problems in 2D
Many of the mathematical operations we’re going to learn about in the following chapter work equally well in 2D and 3D. This is very good news, because
it means you can sometimes solve a 3D vector problem by thinking and drawing pictures in 2D (which is considerably easier to do!) Sadly, this equivalence
165
166 4. 3D Math for Games
between 2D and 3D does not hold all the time. Some operations, like the cross
product, are only defined in 3D, and some problems only make sense when
all three dimensions are considered. Nonetheless, it almost never hurts to
start by thinking about a simplified two-dimensional version of the problem
at hand. Once you understand the solution in 2D, you can think about how
the problem extends into three dimensions. In some cases, you’ll happily discover that your 2D result works in 3D as well. In others, you’ll be able to
find a coordinate system in which the problem really is two-dimensional. In
this book, we’ll employ two-dimensional diagrams wherever the distinction
between 2D and 3D is not relevant.
0 Comments
Please Comment for any further query :