Game Development Reference
In-Depth Information
The RigidBody2D constructor is straightforward, as shown next, and simply initializes
all the properties to some arbitrarily tuned values we decided worked well. In Chap‐
ter 17 , you'll see how we model a more realistic hovercraft.
RigidBody2D::RigidBody2D(void)
{
fMass = 100;
fInertia = 500;
fInertiaInverse = 1/fInertia;
vPosition.x = 0;
vPosition.y = 0;
fWidth = 10;
fLength = 20;
fHeight = 5;
fOrientation = 0;
CD.x = −0.25*fLength;
CD.y = 0.0f;
CD.z = 0.0f;
CT.x = −0.5*fLength;
CT.y = 0.0f;
CT.z = 0.0f;
CPT.x = 0.5*fLength;
CPT.y = −0.5*fWidth;
CPT.z = 0.0f;
CST.x = 0.5*fLength;
CST.y = 0.5*fWidth;
CST.z = 0.0f;
ProjectedArea = (fLength + fWidth)/2 * fHeight; // an approximation
ThrustForce = _THRUSTFORCE;
}
As in the particle simulator of Chapter 8 , you'll notice here that the Vector class is
actually a triple (that is, it has three components—x, y, and z). Since this is a 2D example,
the z components will always be 0, except in the case of the angular velocity vector where
only the z component will be used (since rotation occurs only about the z-axis). The
class that we use in this example is discussed in Appendix A . The reason we didn't write
a separate 2D vector class, one with only x and y components, is because we'll extend
this code to 3D later and wanted to get you accustomed to using the 3D vector class.
Besides, it's pretty easy to create a 2D vector class from the 3D class by simply stripping
out the z component.
As with the particle example of Chapter 8 , we need a CalcLoads method for the rigid
body. As before, this method will compute all the loads acting on the rigid body, but
now these loads include both forces and moments that will cause rotation. CalcLoads
looks like this: