?? zcamera.h
字號:
#ifndef _ZCAMERA_H_
#define _ZCAMERA_H_
#include <d3d9.h>
#include <d3dx9.h>
/**
* @brief 簡單的攝像機操作類
* @author 金智漢
* @todo 沒有對上方90度或下方90度進行檢驗,從數值上來看是不穩定的.
*/
class ZCamera
{
D3DXVECTOR3 m_vEye; /// 攝像機的當前位置
D3DXVECTOR3 m_vLookat; /// 攝像機的視線位置
D3DXVECTOR3 m_vUp; /// 攝像機的上方向量
D3DXVECTOR3 m_vView; /// 攝像機指向的單位方向向量
D3DXVECTOR3 m_vCross; /// 攝像機的側面向量 cross(view,up)
D3DXMATRIXA16 m_matView; /// 攝像機矩陣
D3DXMATRIXA16 m_matBill; /// 廣告牌矩陣(攝像機的逆矩陣)
public:
/// 創建者
ZCamera();
/// 得到攝像機矩陣.
D3DXMATRIXA16* GetViewMatrix() { return &m_matView; }
/// 得到廣告牌矩陣.
D3DXMATRIXA16* GetBillMatrix() { return &m_matBill; }
public:
/// 設定創建攝像機矩陣的基本向量值.
D3DXMATRIXA16* SetView( D3DXVECTOR3* pvEye,D3DXVECTOR3* pvLookat,D3DXVECTOR3* pvUp);
/// 設定攝像機的位置值.
void SetEye( D3DXVECTOR3* pv ) { m_vEye = *pv; }
/// 得到攝像機的位置值.
D3DXVECTOR3* GetEye() { return &m_vEye; }
void SetLookat( D3DXVECTOR3* pv ) { m_vLookat = *pv; }
/// 得到攝像機的視線值.
D3DXVECTOR3* GetLookat() { return &m_vLookat; }
/// 設定攝像機的上方向量值.
void SetUp( D3DXVECTOR3* pv ) { m_vUp = *pv; }
/// 得到攝像機的上方向量值.
D3DXVECTOR3* GetUp() { return &m_vUp; }
/// 更新值.
void Flush() { SetView( &m_vEye, &m_vLookat, &m_vUp ); }
/// 以攝像機坐標系的X軸為軸旋轉angle.
D3DXMATRIXA16* RotateLocalX( float angle );
/// 以攝像機坐標系的Y軸為軸旋轉angle.
D3DXMATRIXA16* RotateLocalY( float angle );
// D3DXMATRIXA16* RotateLocalZ( float angle );
/// 移動到世界坐標系的 *pv值的位置.
D3DXMATRIXA16* MoveTo( D3DXVECTOR3* pv );
/// 朝著攝像機坐標系X軸方向前進dist(后退時為-dist)
D3DXMATRIXA16* MoveLocalX( float dist );
/// 朝著攝像機坐標系Y軸方向前進dist(后退時為-dist)
D3DXMATRIXA16* MoveLocalY( float dist );
/// 朝著攝像機坐標系Z軸方向前進dist(后退時為-dist)
D3DXMATRIXA16* MoveLocalZ( float dist );
};
#endif // _ZCAMERA_H_
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -