📄 camera.h
字号:
//--------------------------------------------------
// Desc: 摄像机
// Date: 2006.12.27 /update
// Author: artsylee
//
// Copyright (C) 2006 artsylee
//
//--------------------------------------------------
#ifndef _CAMERA_
#define _CAMERA_
#include <d3dx9.h>
#include "GNode.h"
enum Camera_Type
{
CT_MODELVIEW, // 第三人称
CT_FREEVIEW, // 自由视角
CT_FIRSTVIEW, // 第一人称
CT_INVALID, // 无效
};
//---------------------------------------------------
// 第一人称摄像机
//---------------------------------------------------
class CCamera
{
public:
CCamera();
virtual ~CCamera();
void MoveLR(float units); // left/right
void MoveUD(float units); // up/down
void MoveFB(float units); // forward/backward
virtual void RotateRight(float angle); // rotate on right vector
virtual void RotateUp(float angle); // rotate on up vector
virtual void RotateLook(float angle); // rotate on look vector
virtual void GetViewMatrix(D3DXMATRIX* V);
void SetPosition(D3DXVECTOR3* pos) { m_Position = *pos; }
void GetPosition(D3DXVECTOR3* pos) { *pos = m_Position; }
void GetRight(D3DXVECTOR3* right) { *right = m_Right; }
void SetRight(D3DXVECTOR3* right) { m_Right = *right; }
void GetUp(D3DXVECTOR3* up) { *up = m_Up; }
void SetUp(D3DXVECTOR3* up) { m_Up = *up; }
void GetLook(D3DXVECTOR3* look) { *look = m_Look; }
void SetLook(D3DXVECTOR3* look) { m_Look = *look; }
float GetRotateYAngle(void);
float GetRotateXAngle(void);
virtual void SaveCamera(const char *pFile) const;
virtual void LoadCamera(const char *pFile);
protected:
D3DXVECTOR3 m_Right;
D3DXVECTOR3 m_Up;
D3DXVECTOR3 m_Look;
D3DXVECTOR3 m_Position;
};
//---------------------------------------------------
// 第三人称摄像机
//---------------------------------------------------
class ModelViewCamera : public CCamera, public GNode
{
public:
ModelViewCamera();
~ModelViewCamera();
virtual void GetViewMatrix(D3DXMATRIX* V);
virtual void RotateRight(float angle);
virtual void RotateUp(float angle);
virtual void RotateLook(float angle);
virtual void SaveCamera(const char *pFile) const;
virtual void LoadCamera(const char *pFile);
void RotateRightTo(float fDestAngle);
void RotateUpTo(float fDestAngle);
void RotateLookTo(float fDestAngle);
float GetCameraRadius(void);
void SetCameraRadius(float fRadius);
void ScaleCameraRadius(float fScale);
void SetCollision(bool c) { m_bCollision = c; }
bool GetCollision(void) { return m_bCollision; }
void SetOffsetParentPos(D3DXVECTOR3 vOffsetPos);
void GetOffsetParentPos(D3DXVECTOR3 *pOffsetPos);
float GetYawAngle() { return m_fCameraYawAngle; }
// 无用的设置, 隐藏基类实现
void SetPosition(D3DXVECTOR3* pos) {}
void SetRight(D3DXVECTOR3* right) {}
void SetUp(D3DXVECTOR3* up) {}
void SetLook(D3DXVECTOR3* look) {}
void MoveLR(float units) {}
void MoveUD(float units) {}
void MoveFB(float units) {}
// 两个基类都有此函数, 重新实现之.
void GetPosition(D3DXVECTOR3* pos) { *pos = m_Position; }
private:
// 观察目标点
D3DXVECTOR3 m_vDestination;
// 目标点的偏移
D3DXVECTOR3 m_vOffsetParentPos;
float m_fCameraYawAngle;
float m_fCameraPitchAngle;
float m_fRadius;
// 是否限制摄像机在地形之上
bool m_bCollision;
};
#endif // _CAMERA_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -