Game Development Reference
In-Depth Information
vForces += vWind;
}
So after the force due to gravity is added to the aggregate, two new local variables are
declared. vDrag is a vector that will represent the still air drag force. fDrag is the mag‐
nitude of that drag force. Since we know the drag force vector is exactly opposite to the
particle's velocity vector, we can equate vDrag to negative vVelocity and then normalize
vDrag to obtain a unit vector pointing in a direction opposite of the particle's velocity.
Next we compute the magnitude of the drag force using the formula shown earlier. This
line handles that:
fDrag = 0.5 * _AIRDENSITY * fSpeed * fSpeed *
(3.14159 * fRadius * fRadius) * _DRAGCOEFFICIENT;
Here, _AIRDENSITY is a global define representing the density of air, which we have set
to 1.23 kg/m 3 (standard air at 15°C). fSpeed is the particle's speed: the magnitude of its
velocity. The 3.14159 * fRadius * fRadius line represents the projected area of the
particle assuming the particle is a sphere. And finally, _DRAGCOEFFICIENT is a drag co‐
efficient that we have set to 0.6. We picked this value from the chart of drag coefficient
for a smooth sphere versus the Reynolds number shown in Chapter 6 . We simply eye‐
balled a value in the Reynolds number range from 1e4 to 1e5. You have a choice here
of tuning the drag coefficient value to achieve some desired effect, or you can create a
curve fit or lookup table to select a drag coefficient corresponding to the Reynolds
number of the moving particle.
Now that we have the magnitude of the drag force, we simply multiply that force by the
unit drag vector to obtain the final drag force vector. This vector then gets aggregated
in vForces .
We handle the wind force in a similar manner with a few differences in the details. First,
since we know the unit wind force vector is in the positive x-direction (i.e., it acts from
left to right), we can simply set the x component of the wind force vector, vWind , to the
magnitude of the wind force. We compute that wind force using the same formula we
used for still air drag with the exception of using the wind speed instead of the particle's
speed. We used _WINDSPEED , a global define , to represent the wind speed, which we
have set to 10 m/s (about 20 knots).
Finally, the wind force is aggregated in vForces .
At this stage the particles will fall under the influence of gravity, but not as fast as they
would have without the drag force. And now they'll also drift to the right due to the
wind force.