//----------------------------------------------------------------------------- // 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() ); }