microsoftxiao

记忆 流逝

导航

更简化的第一人称视角,矩阵未优化。

简化后的部分,实现对鼠标的控制。
//设置第一人称视角控制
HRESULT CMyD3DApplication::SetFirstView()
{
    D3DXMATRIX matIdentity;
    D3DXMatrixIdentity( &matIdentity );
    m_pd3dDevice->SetTransform( D3DTS_WORLD,  &matIdentity );

 //视角矩阵   
 D3DXMATRIX matView;
    D3DXMATRIX matMoveView,matMoveOut;
    D3DXMATRIX matRotY,matRotX,matBothRot;
 
 D3DXMatrixLookAtLH( &matView, &m_matAni.eye, &m_matAni.LookAt, &m_matAni.Up);
 {
  //对摄影机进行水平旋转
  if(m_RotView){
     D3DXMatrixRotationY(&matRotY,m_yAngle);
     D3DXMatrixRotationX(&matRotX,m_xAngle);
     D3DXMatrixMultiply(&matBothRot,&matRotY,&matRotX);
     D3DXMatrixMultiply(&matRotOut,&matView,&matBothRot);
   matView = matRotOut;
   m_StartView = true;
  }else{
   if(m_StartView){
    matView = matRotOut;
   }
  }
  //移动
  if(m_AtView){
     m_AtView = false;
           D3DXMatrixTranslation(&matMoveView,m_ViewX,m_ViewY,m_ViewZ);
     D3DXMatrixMultiply(&matMoveOut,&matView,&matMoveView);
     matView = matMoveOut;
  }
 }
 m_pd3dDevice->SetTransform( D3DTS_VIEW, &matView);
       
    // Set the projection matrix
    D3DXMATRIX matProj;
    FLOAT fAspect = ((FLOAT)m_d3dsdBackBuffer.Width) / m_d3dsdBackBuffer.Height;
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, fAspect, 1.0f, 100.0f );
    m_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );

 return S_OK;
}

//通过Dinput的鼠标处理部分。
HRESULT CMyD3DApplication::ProcessMouse()
{
 if(FAILED(pMouse->GetDeviceState(sizeof(MState),(LPVOID)&MState)))
  return E_FAIL;

 //X > 0 X < 0
 if(MState.lX < 0){
  m_RotView = true;
  m_RotXYView = true;
  m_yAngle += m_RotationAdd;
 }
   
 if(MState.lX > 0){
  m_RotView = true;
  m_RotXYView = true;
  m_yAngle -= m_RotationAdd;
 }
 //Y > 0 Y < 0
   
 if(MState.lY < 0){
  m_RotView = true;
  m_RotXYView = false;
  m_xAngle += m_RotationAdd;
 }

 if(MState.lY > 0){
  m_RotView = true;
  m_RotXYView = false;
  m_xAngle -= m_RotationAdd;
 }
 //零时
 if(MState.lX == 0 && MState.lY == 0){
  m_RotView = false;
 }
 
 return S_OK;
}

posted on 2006-03-29 15:51  龙巢NET刀  阅读(500)  评论(0)    收藏  举报