Bob is in here just in time for another adventure! But what's this?

He's on an airplane? What's the big deal?

HE'S ON TOP OF THE AIRPLANE!?? Get down from there Bob, you'll hurt yourself!!

There are several animation related technologies that I am using in this demo, particularly heirarchichal modeling, skinned mesh animation, catmull rom splines, arc-length parameterization, sprite billboarding, and blending.

The heirarchical modeling used is relatively simple. Each component of the airplane is a child of an airplane control point and a transformation relative to the control point. The only animated component of the plane (the propeller) has a spin applied before it is translated.

Bob is also a child of the airplane control point. He is an MD5 model loaded using the AssImp library and animated on the GPU using linear blend skinning. Unfortunately I was unable to figure out how to export MD5 models using 3DS max (and too stubborn to learn blender.)

The plane itself is traveling along a Catmull Rom spline, and changing speed by using arc length parameterization and a function of acceleration based on change of direction. The pitch and the yaw of the plane are tangent to the spline, the roll is determined by an additional parameter specifying the angle in degrees from straight up that it should be rotated.

Despite how cool the clouds look, they are actually stupidly simple. Basically I rendered a white point with blurred edges (by turning the alpha down further away from the center of the point) and turning off depth test. I experimented with trying to make the thicker part of the clouds darker, but I could not get FBOs working.

Each point of the cloud is initially distributed randomly, then the airplane makes more points behind it as it flies around. Each frame, the particles move according to a simplified version of Stoke's law, where the force of the plane is modeled as a sound. So the force is just the position of the particle relative to the plane, times the velocity of the plane dotted with relative position vector, times one divided by the length of the relative position vector cubed.