HRESULT CMyCompositor9::AdjustViewMatrix( IDirect3DDevice9* d3ddev ) { ASSERT( d3ddev ); HRESULT hr; if( m_needTurn == false ) { return S_FALSE; } // // view matrix // float x, y; x = float( m_x ) / 100 ; y = float( m_y ) / 100 ; D3DVECTOR from = { x, y, -4.0f }; D3DVECTOR at = { 0.0f, 1.0f, 0.0f }; D3DVECTOR up = { 0.0f, 1.0f, 0.0f }; D3DMATRIX matView; MatrixLookAtLH(&matView, &from, &at, &up); FAIL_RET( d3ddev->SetTransform( D3DTS_VIEW, &matView ) ); m_needTurn = false; return hr; }
void C3d::SetupMatrices() { D3DXMATRIXA16 matWorld1; D3DXMATRIXA16 mat; D3DXVECTOR3 vEyePt(0.0f, vRadius*distance*1.025f,vRadius*distance*-3.0f ); D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec( 0.0f, 0.5f, 0.0f ); if(rotation) { D3DXMatrixIdentity(&mat); MatrixRotationY( &mat, timeGetTime()/1500.0f ); } else { m_abArcBall.GetMat(&mat); vEyePt = D3DXVECTOR3(0.0f, 0.0f,vRadius*distance*-4.0f); vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); vUpVec = D3DXVECTOR3( 0.0f, 1.0f, 1.0f ); } MatrixMultiply(&matWorld , &mat, &matWorld1); g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld1 ); D3DXMATRIXA16 matView; MatrixLookAtLH(&matView, &vEyePt, &vLookatPt, &vUpVec ); g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView ); D3DXMATRIXA16 matProj; MatrixPerspectiveFovLH( &matProj, D3DX_PI/5, Aspect, 1.0f, vRadius*20);// 10.0f ); g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj ); }
// updates matrices from current settings void ShadowCamera::CalculateMatrices(void) { // view matrix m_mView = MatrixLookAtLH(m_vSource, m_vTarget, m_vUpVector); // projection matrix m_mProj = MatrixPerspectiveFovLH(m_fFOV, GetApp()->GetAspectRatio(), m_fNear, m_fFar); }