Example #1
0
//-----------------------------------------------------------------------------
// Name: SetupMatrices()
// Desc: Sets up the world, view, and projection transform matrices.
//-----------------------------------------------------------------------------
VOID SetupMatrices()
{
	// Yaw: Rotate around the Y axis
	// USING MATRIX (EULER ANGLE, YAW):
	//Matrix4x4 matYaw = Yaw( timeGetTime() / 2000.0f );
	
	// USING QUATERNION:
	Vector3 rotationAxis(0, 1, 0);		// Rotate Y axis
	float rotationAngle = sinf( timeGetTime() / 2000.0f );
	Quaternion myRotation( FromAxisAngle( rotationAxis, rotationAngle ) );
	Quaternion additionalRotation( 0, 0, 1, 0 );
	Quaternion slerpTest = Slerp( myRotation, additionalRotation, rotationAngle );
	g_rotationMatrix = ConvertToMatrix4x4( slerpTest );
	
	// NOTE: I DON'T KNOW IF I'M USING QUATERNIONS RIGHT!!!

	// Position matrix:
	Matrix4x4 matMove;
	if ( g_renderSetting == 6 )
		matMove = Position( 0.0f, 0.0f, 0.5f * sinf( timeGetTime() / 500.0f) * 3.0f );
	else
		matMove = Position( 0.0f, 0.0f, 0.0f );
	
	// Multiply the quaternion matrix by the position matrix
	g_matWorld = g_rotationMatrix * matMove;

	// Set it and forget it
	g_pd3dDevice->SetTransform( D3DTS_WORLD, &g_matWorld.DXMatrix() );
	
    // Set up our view matrix. A view matrix can be defined given an eye point,
    // a point to lookat, and a direction for which way is up. Here, we set the
    // eye five units back along the z-axis and up three units, look at the
    // origin, and define "up" to be in the y-direction.
    Vector3 vEyePt( 0.0f, 3.0f, -7.0f );
    Vector3 vLookatPt( 0.0f, 0.0f, 0.0f );
    Vector3 vUpVec( 0.0f, 1.0f, 0.0f );
	Matrix4x4 matView = View( vEyePt, vLookatPt, vUpVec );
	g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView.DXMatrix() );

    // For the projection matrix, we set up a perspective transform (which
    // transforms geometry from 3D view space to 2D viewport space, with
    // a perspective divide making objects smaller in the distance). To build
    // a perpsective transform, we need the field of view (1/4 pi is common),
    // the aspect ratio, and the near and far clipping planes (which define at
    // what distances geometry should be no longer be rendered).
	Matrix4x4 matProj = Perspective( D3DX_PI / 4, (float)(WIDTH) / (float)(HEIGHT), 1.0f, 100.0f );
	g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj.DXMatrix() );
}