void CreateInterpolationCam( int iBank, float fTime, D3DXVECTOR3& CamPos, D3DXVECTOR3& LookAt ) { D3DXVECTOR3 vecPos( GetFloatParam( iBank, 0 ), GetFloatParam( iBank, 1 ), GetFloatParam( iBank, 2 ) ); D3DXVECTOR3 vecPos2( GetFloatParam( iBank + 1, 0 ), GetFloatParam( iBank + 1, 1 ), GetFloatParam( iBank + 1, 2 ) ); D3DXVECTOR3 vecLookAt( GetFloatParam( iBank + 2, 0 ), GetFloatParam( iBank + 2, 1 ), GetFloatParam( iBank + 2, 2 ) ); D3DXVECTOR3 vecLookAt2( GetFloatParam( iBank + 3, 0 ), GetFloatParam( iBank + 3, 1 ), GetFloatParam( iBank + 3, 2 ) ); CamPos= vecPos + vecPos2 * fTime * GetFloatParam( iBank + 1, 3 ); LookAt= vecLookAt + vecLookAt2 * fTime * GetFloatParam( iBank + 3, 3 ); } void CreateRotationCam( int iBank, float fTime, D3DXVECTOR3& CamPos, D3DXVECTOR3& LookAt ) { D3DXVECTOR3 vecPos( GetFloatParam( iBank, 0 ), GetFloatParam( iBank, 1 ), GetFloatParam( iBank, 2 ) ); const float fRadiusA= GetFloatParam( iBank + 1, 0 ); const float fSpeedA= GetFloatParam( iBank + 1, 1 ) * c_2PI; const float fRadiusB= GetFloatParam( iBank + 1, 2 ); const float fSpeedB= GetFloatParam( iBank + 1, 3 ) * c_2PI; D3DXVECTOR3 vecLook( GetFloatParam( iBank + 2, 0 ), GetFloatParam( iBank + 2, 1 ), GetFloatParam( iBank + 2, 2 ) ); vecPos.x+= sinf( fSpeedA * fTime ) * fRadiusA; vecPos.z+= cosf( fSpeedA * fTime ) * fRadiusA; vecPos.y+= sinf( fSpeedB * fTime ) * fRadiusB; vecPos.z+= cosf( fSpeedB * fTime ) * fRadiusB; CamPos= vecPos; LookAt= vecLook; } void SetCamera( SCameraDescription* pCam, float fTime ) { D3DXMATRIX mat; D3DXVECTOR3 CamPos; D3DXVECTOR3 LookAt; switch( pCam->m_iType ) { case 0: CreateInterpolationCam( pCam->m_iBaseBank, fTime, CamPos, LookAt ); break; case 1: CreateRotationCam( pCam->m_iBaseBank, fTime, CamPos, LookAt ); break; } D3DXMatrixLookAtLH( &mat, (D3DXVECTOR3*)&CamPos, (D3DXVECTOR3*)&LookAt, (D3DXVECTOR3*)&D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) ); g_d3d_device->SetTransform( D3DTS_VIEW, &mat ); }