Camera

来源:互联网 发布:基金入门书籍推荐知乎 编辑:程序博客网 时间:2024/05/07 15:11
#pragma once#include <d3d9.h>#include <D3dx9core.h>class CGameCamera{public:CGameCamera(void);~CGameCamera(void);public://设置Camera向量void SetCameraVector(D3DXVECTOR3 vecCamera);//取得Camera向量D3DXVECTOR3 GetCameraVector();//设置Target向量void SetTargetVector(D3DXVECTOR3 vecTarget);//取得Target向量D3DXVECTOR3 GetTargrtVector();//沿Right轴移动void MoveAlongRight(float fUnits);//沿Up轴移动void MoveAlongUp(float fUnits);//沿Look轴移动void MoveAlongLook(float fUnits);//绕Right轴旋转void RotateBendRight(float fAngle);//绕Up轴旋转void RotateBendUp(float fAngle);//绕Look轴旋转void RotateBendLook(float fAngle);//取得取景矩阵D3DMATRIX GetViewMatrix();private:D3DXVECTOR3 m_vecRight;D3DXVECTOR3 m_vecUp;D3DXVECTOR3 m_vecLook;D3DXVECTOR3 m_vecCamera;D3DXVECTOR3 m_vecTarget;D3DMATRIX   m_mxView;};

#pragma comment(lib, "d3d9.lib")#pragma comment(lib, "d3dx9.lib")#include "GameCamera.h"/**功能 :构造函数*参数 :void*返回 :*描述 :初始化Right, Up, Look, Camera, Target*/CGameCamera::CGameCamera(void){m_vecRight  = D3DXVECTOR3(1.0f, 0.0f,  0.0f);m_vecUp     = D3DXVECTOR3(0.0f, 1.0f,  0.0f);m_vecLook   = D3DXVECTOR3(0.0f, 0.0f,  1.0f);m_vecCamera = D3DXVECTOR3(0.0f, 0.0f, -250.0f);m_vecTarget = D3DXVECTOR3(0.0f, 0.0f,  0.0f);}/**功能 :析构函数*参数 :void*返回 :*描述 :*/CGameCamera::~CGameCamera(void){}/**功能 :设置Camera位置*参数 :D3DXVECTOR3*返回 :void*描述 :设置Camera位置,并规范化Right, Up, Look*/void CGameCamera::SetCameraVector( D3DXVECTOR3 vecCamera ){m_vecCamera = vecCamera;m_vecLook   = m_vecTarget - m_vecCamera;D3DXVec3Normalize(&m_vecLook, &m_vecLook);D3DXVec3Cross(&m_vecUp, &m_vecLook, &m_vecRight);D3DXVec3Normalize(&m_vecUp, &m_vecUp);D3DXVec3Cross(&m_vecRight, &m_vecUp, &m_vecLook);D3DXVec3Normalize(&m_vecRight, &m_vecRight);}/**功能 :取得Camera位置*参数 :void*返回 :D3DXVECTOR3*描述 :*/D3DXVECTOR3 CGameCamera::GetCameraVector(){return m_vecCamera;}/**功能 :设置Target位置*参数 :D3DXVECTOR3*返回 :void*描述 :设置Target位置,并规范化Right, Up, Look*/void CGameCamera::SetTargetVector( D3DXVECTOR3 vecTarget ){m_vecTarget = vecTarget;m_vecLook   = m_vecTarget - m_vecCamera;D3DXVec3Normalize(&m_vecLook, &m_vecLook);D3DXVec3Cross(&m_vecUp, &m_vecLook, &m_vecRight);D3DXVec3Normalize(&m_vecUp, &m_vecUp);D3DXVec3Cross(&m_vecRight, &m_vecUp, &m_vecLook);D3DXVec3Normalize(&m_vecRight, &m_vecRight);}/**功能 :取得Target位置*参数 :void*返回 :D3DXVECTOR3*描述 :*/D3DXVECTOR3 CGameCamera::GetTargrtVector(){return m_vecTarget;}/**功能 :沿Right方向平移fUnits个单位*参数 :float*返回 :void*描述 :*/void CGameCamera::MoveAlongRight( float fUnits ){m_vecCamera += m_vecRight * fUnits;m_vecTarget += m_vecRight * fUnits;}/**功能 :沿Up方向平移fUnits个单位*参数 :float*返回 :void*描述 :*/void CGameCamera::MoveAlongUp( float fUnits ){m_vecCamera += m_vecUp * fUnits;m_vecTarget += m_vecUp * fUnits;}/**功能 :沿Look方向平移fUnits个单位*参数 :float*返回 :void*描述 :*/void CGameCamera::MoveAlongLook( float fUnits ){m_vecCamera += m_vecLook * fUnits;m_vecTarget += m_vecLook * fUnits;}/**功能 :沿Right方向旋转fangle度*参数 :float*返回 :void*描述 :*/void CGameCamera::RotateBendRight( float fAngle ){D3DXMATRIX mxRight;D3DXMatrixRotationAxis(&mxRight, &m_vecRight, fAngle);D3DXVec3TransformCoord(&m_vecLook, &m_vecLook, &mxRight);D3DXVec3TransformCoord(&m_vecUp, &m_vecUp, &mxRight);}/**功能 :沿Up方向旋转fangle度*参数 :float*返回 :void*描述 :*/void CGameCamera::RotateBendUp( float fAngle ){D3DXMATRIX mxUp;D3DXMatrixRotationAxis(&mxUp, &m_vecUp, fAngle);D3DXVec3TransformCoord(&m_vecLook, &m_vecLook, &mxUp);D3DXVec3TransformCoord(&m_vecRight, &m_vecRight, &mxUp);}/**功能 :沿Look方向旋转fangle度*参数 :float*返回 :void*描述 :*/void CGameCamera::RotateBendLook( float fAngle ){D3DXMATRIX mxLook;D3DXMatrixRotationAxis(&mxLook, &m_vecLook, fAngle);D3DXVec3TransformCoord(&m_vecRight, &m_vecRight, &mxLook);D3DXVec3TransformCoord(&m_vecUp, &m_vecUp, &mxLook);}/**功能 :计算取景变换矩阵*参数 :void*返回 :D3DMATRIX*描述 :*/D3DMATRIX CGameCamera::GetViewMatrix(){D3DXVec3Normalize(&m_vecLook, &m_vecLook);D3DXVec3Cross(&m_vecUp, &m_vecLook, &m_vecRight);D3DXVec3Normalize(&m_vecUp, &m_vecUp);D3DXVec3Cross(&m_vecRight, &m_vecUp, &m_vecLook);D3DXVec3Normalize(&m_vecRight, &m_vecRight);D3DXMATRIX viewMatrix;viewMatrix._11 = m_vecRight.x;viewMatrix._12 = m_vecUp.x;viewMatrix._13 = m_vecLook.x;viewMatrix._14 = 0.0f;viewMatrix._21 = m_vecRight.y;viewMatrix._22 = m_vecUp.y;viewMatrix._23 = m_vecLook.y;viewMatrix._24 = 0.0f;viewMatrix._31 = m_vecRight.z;viewMatrix._32 = m_vecUp.z;viewMatrix._33 = m_vecLook.z;viewMatrix._34 = 0.0f;viewMatrix._41 = -D3DXVec3Dot(&m_vecRight, &m_vecCamera);viewMatrix._42 = -D3DXVec3Dot(&m_vecUp, &m_vecCamera);viewMatrix._43 = -D3DXVec3Dot(&m_vecLook, &m_vecCamera);viewMatrix._44 = 1.0f;return viewMatrix;}

原创粉丝点击