Author: Ian Millington
Publisher: Morgan Kaufmann, 2nd edition, 2010
Aimed at: Games and graphics programmers
Pros: Direct and down to earth approach
Cons: Tendency to avoid the maths
Reviewed by: Mike James
Games programmers and 3D graphics programmers have a basic problem when it comes to animating simple objects - the way that they behave is all a matter of physics. The problem is that many graphics programmers are completely ignorant of physics. This book sets out to educate the programmer in the basic physics and maths needed to implement some simple physics based animation and along the way to build a physics engine as a set of C++ classes.
Having said this it is important to know that the book is fairly light on the physics and maths details. Newton's laws of motion, the inertia tensor and some rigid body motion is about as far as it goes. You won't find much about Lagrangians or differential equations in this book. However, if you are looking for a fairly direct approach to the programming problem then it is exactly what you do want.
It is also important to know that this book is not about implementing accurate physics simulations. The only thing that matters it that it looks right and if you can fudge the physics a little (or even a lot) and end up with something that looks right then so be it.
The first part of the book is about particle physics - no not the Higgs boson but the laws of motion of a simple point particle. In this part we learn about forces, acceleration and gravity to create a very simple firework simulation.
The second part of the book describes mass aggregate physics. This deals with assemblies of particles moving under simple constrains - springs, contact and collisions. There is a lot of practical discussion in this section of why things go wrong with stiff springs and other things that turn out to be difficult to work with in practice.
The third part tackles the most difficult subject of rigid body physics. Here we learn about rotations and the laws of rotational motion. The inertia tensor is introduced but without the advanced mathematics needed you only really get a rough idea of what is going on. But it is probably enough to implement a simple animation of an arbitrary body tumbling though space say.
Part IV is on collision detection and detecting contacts. Part V deals with contact physics and formulates the problem in terms of impulses. In this section we also deal with resting contact, friction and stability.
The book closes with a look at more advanced ideas but nothing very advanced. Indeed you could say this "nothing very advanced" comment sums up the entire book. It stays very rooted in what the graphics programmer is trying to do and doesn't go off to explain theoretical ideas that might be interesting but not really necessary.
For me the book doesn't really give enough mathematical detail but if you don't get on with maths it might be just right. It certainly would enable you to see the basic ideas and perhaps move on tor read a more advanced book. It provides good simple implementations of most of the ideas but it doesn't really cover overall architecture or design of a physics engine and how it would integrate into the wider software. It also doesn't discuss the range of available physics engines and the code presented almost certainly isn't up to the job of being used for real. There is also little or no discussion of alternative methods and where there is usually there isn't enough for you to understand the alternatives. It also doesn't deal with coding using GPU or anything other than basic C++.
This is a good but basic book on simulating simple physics. Overall I liked its down to earth approach and I can recommend it if you really don't want to master the advanced maths. If you are going on to do anything complicated or ground breaking then you will need to master the maths one day, but that's another book...
This article is available in Serbo-Croatian - translation by Jovana Milutinovich from WebHostingGeeks.com.