zoukankan      html  css  js  c++  java
  • Dx基本Camera类

    #ifndef __CameraH__
    #define __CameraH__

    #include <d3d9.h>
    #include <d3dx9.h>
    #include <Windows.h>

    class CCamera
    {
    private:
     IDirect3DDevice9* m_pDevice;
     D3DXVECTOR3 m_vPos;
     POINT m_LastPoint;
     float m_fYaw, m_fPitch, m_fVelocity;
     bool m_bIsRot;
    private:
     void SetView();
    public:
     void SetCamera(IDirect3DDevice9* pDevice, D3DXVECTOR3 vPos, float fYaw, float fPitch, float fVelocity);
     void Logic(float fElapsedTime);
     void Handle(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
    };
    void CCamera::SetCamera(IDirect3DDevice9* pDevice, D3DXVECTOR3 vPos, float fYaw, float fPitch, float fVelocity)
    {
     m_pDevice = pDevice; m_vPos = vPos; m_fYaw = fYaw; m_fPitch = fPitch; m_fVelocity = fVelocity;
     m_bIsRot = false;
     SetView();
    }
    void CCamera::Logic(float fElapsedTime)
    {
     D3DXVECTOR3 vDelta(0.0f, 0.0f, 0.0f);
     bool bOk = false;
     float fDistance = m_fVelocity * fElapsedTime;
     if(GetAsyncKeyState('W') & 0x8000) { vDelta.z += fDistance; bOk = true; }
     if(GetAsyncKeyState('S') & 0x8000) { vDelta.z -= fDistance; bOk = true; }
     if(GetAsyncKeyState('A') & 0x8000) { vDelta.x -= fDistance; bOk = true; }
     if(GetAsyncKeyState('D') & 0x8000) { vDelta.x += fDistance; bOk = true; }
     if(GetAsyncKeyState(VK_HOME) & 0x8000) { vDelta.y += fDistance; bOk = true; }
     if(GetAsyncKeyState(VK_END) & 0x8000) { vDelta.y -= fDistance; bOk = true; }
     if(bOk)
     {
      D3DXMATRIX matRot;
      D3DXMatrixRotationYawPitchRoll(&matRot, m_fYaw, m_fPitch, 0.0f);
      D3DXVec3TransformNormal(&vDelta, &vDelta, &matRot);
      m_vPos += vDelta;
     }
     if(m_bIsRot)
     {
      POINT CurrentPoint;
      GetCursorPos(&CurrentPoint);
      POINT DeltaPoint;
      DeltaPoint.x = CurrentPoint.x - m_LastPoint.x;
      DeltaPoint.y = CurrentPoint.y - m_LastPoint.y;
      m_LastPoint = CurrentPoint;
      m_fYaw += DeltaPoint.x * 0.01f;
      m_fPitch += DeltaPoint.y * 0.01f;
     }
     SetView();
    }
    void CCamera::Handle(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
     if(uMsg == WM_RBUTTONDOWN)
     {
      m_bIsRot = true;
      GetCursorPos(&m_LastPoint);
      SetCapture(hWnd);
     }
     else if(uMsg == WM_RBUTTONUP)
     {
      m_bIsRot = false;
      ReleaseCapture();
     }
    }
    void CCamera::SetView()
    {
     D3DXVECTOR3 vPos = m_vPos;
     D3DXMATRIX matRot;
     D3DXMatrixRotationYawPitchRoll(&matRot, m_fYaw, m_fPitch, 0.0f);
     D3DXVECTOR3 vDir;
     D3DXVec3TransformNormal(&vDir, &D3DXVECTOR3(0.0f, 0.0f, 1.0f), &matRot);
     D3DXVECTOR3 vLookAt = vPos + vDir;
     D3DXVECTOR3 vUp;
     D3DXVec3TransformNormal(&vUp, &D3DXVECTOR3(0.0f, 1.0f, 0.0f), &matRot);
     D3DXMATRIX matView;
     D3DXMatrixLookAtLH(&matView, &vPos, &vLookAt, &vUp);
     m_pDevice->SetTransform(D3DTS_VIEW, &matView);
    }
    #endif

  • 相关阅读:
    kubernetes的设计理念
    kubernetes整体架构
    kubernetes的起源
    云原生有未来吗?
    cloud native
    kata containers
    go特性
    开源在线分析诊断工具Arthas(阿尔萨斯)--总结
    javaAgent介绍
    oracle函数操作
  • 原文地址:https://www.cnblogs.com/ketmales/p/2478235.html
Copyright © 2011-2022 走看看