📄 camera.h
字号:
/********************************************************************
created: 2007/03/14
created: 14:3:2007 15:04
filename: Camera.h
author: 任晓宇
purpose: 简单摄像机实现
todo: 重新抽象CAMERA类,以子类的形式提供RPG,FPS等摄像机。
当前摄像机实现,在鼠标拖动的同时控制摄像机移动,会
发生抖动的情况。
*********************************************************************/
#pragma once
#include "d3dx9.h"
/** 摄像机类,提供基本的摄像机移动和旋转
@remarks
封装了视矩阵和投影矩阵, 其中投影矩阵提供了透视投影和平行投影。
每次用户输出更改摄像机属性后,需要调用Update()重新计算视矩阵。
@par
此类包括了如下知识点:视变换,投影变换,Windows鼠标键盘消息响应,
*/
class CCamera
{
public:
CCamera();
virtual ~CCamera();
/** 设置生成视矩阵所需的参数
*/
void SetViewParams( D3DXVECTOR3 &pos, D3DXVECTOR3 &lookat, D3DXVECTOR3 &up );
/** 设置生成透视投影矩阵所需的参数
*/
void SetProjParams( float fFOV, float fAspect, float fNear, float fFar );
/** 设置生成视平行投影矩阵所需的参数
*/
void SetOrthoProjParams( float w, float h, float fNear, float fFar );
/** 返回当前的视矩阵
*/
const D3DXMATRIX *GetViewTrans() const;
/** 返回当前的投影矩阵
*/
const D3DXMATRIX *GetProjTrans() const;
/** 设置摄像机移动速度
*/
void SetMoveVelocity( float fVelocity );
/** 在消息循环里处理消息
*/
virtual LRESULT HandleMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
/** 在逻辑帧里面处理消息
*/
virtual void ProcessKey(float fElapsedTime);
/** 更新摄像机属性
@remarks
通常在逻辑帧里面调用此函数,函数内部会自动判断需要更新哪些属性。
*/
virtual void Update();
/** 将视矩阵和投影矩阵设置给D3D设备
*/
void ApplyDevice( LPDIRECT3DDEVICE9 pDevice );
public:
/// 视矩阵
D3DXMATRIX m_ViewTrans;
/// 投影矩阵
D3DXMATRIX m_ProjTrans;
/// 摄像机位置
D3DXVECTOR3 m_EyePos;
/// 摄像机的观察点
D3DXVECTOR3 m_LookAt;
/// 摄像机的UP向量
D3DXVECTOR3 m_Up;
/// 摄像机的RIGHT向量
D3DXVECTOR3 m_Right;
/// 摄像机的方向
D3DXVECTOR3 m_Direction;
/// 近视表面的距离
float m_fNear;
/// 远视表面的距离
float m_fFar;
/// 视角,弧度
float m_fFOV;
/// 长宽比
float m_fAspect;
/// 上一个鼠标位置
POINT m_LastPoint;
/// 用户是否旋转了摄像机
bool m_bIsRot;
/// 用户是否平移了摄像机
bool m_bIsTrans;
/// 摄像机初始状态的欧拉角Yaw,在SetViewParams时初始化
float m_fCameraYawAngle;
/// 摄像机初始状态的欧拉角Pitch,在SetViewParams时初始化
float m_fCameraPitchAngle;
/// 摄像机的平移量
D3DXVECTOR3 m_vDelta;
/// 摄像机的移动速度,单位/秒
float m_fVelocity;
/// 摄像机俯仰角最大值
float m_fMaxPitch;
/// 摄像机俯仰角最小值
float m_fMinPitch;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -