The camera movement is based on "Cardinal splines". The code is at the bottom of this post if you're interested.

I would've loved to add sound to it as well, but I didn't have time (I was trying to get this finished in time for a job interview today

)

The camera has a 90ยบ FOV -- it's probably too much, but I wanted you to be able to see as much on screen as possible.

Dark scenes are always hard to get right. It looks really dark on one of my LCD screens as well, but everything is easily distinguishable on my main LCD. I'm not sure what kind of calibration I should use for testing...

I got the camera movement algorithm from:

http://www.cubic.org/docs/hermite.htmhttp://en.wikipedia.org/wiki/Hermite_curveI just collected a series of points in the world and store them in an array, then I use this code to interpolate between them:

**Code:**

CVector3f HermiteCurveInterpolation( float fraction, const CVector3f& p1, const CVector3f& p2,

const CVector3f& t1, const CVector3f& t2 )

{

float s2 = fraction*fraction;

float s3 = s2*fraction;

float h1 = 2*s3 - 3*s2 + 1;

float h2 = -2*s3 + 3*s2;

float h3 = s3 - 2*s2 + fraction;

float h4 = s3 - s2;

return CVector3f( h1*p1 + h2*p2 + h3*t1 + h4*t2 );

}

CVector3f CardinalSplineInterpolation( float fraction, const CVector3f& p0, const CVector3f& p1,

const CVector3f& p2, const CVector3f& p3, float c )//interpolates between p1 and p2

{

CVector3f t1( (1-c)*0.5f*(p2-p0) );

CVector3f t2( (1-c)*0.5f*(p3-p1) );

return HermiteCurveInterpolation( fraction, p1, p2, t1, t2 );

}