📄 camera.cpp
字号:
#include "Camera.h"
CCamera::CCamera()
{
m_pos = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
m_right = D3DXVECTOR3(1.0f, 0.0f, 0.0f);
m_look = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
m_up = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
}
CCamera::~CCamera(){}
void CCamera::InitCamera(D3DXVECTOR3& CameraPos,D3DXVECTOR3& LookAtPos,D3DXVECTOR3& UpPos){
D3DXVECTOR3 vLookAt=LookAtPos-CameraPos;
D3DXVECTOR3 vUp=UpPos;
D3DXVec3Normalize(&vLookAt, &vLookAt);
D3DXVECTOR3 vRight;
D3DXVec3Cross(&vRight, &vUp, &vLookAt ); //DirectX可使用左手判断叉积方向
D3DXVec3Normalize(&vRight,&vRight);
D3DXVec3Cross(&vUp, &vLookAt, &vRight);
D3DXVec3Normalize(&vUp,&vUp);
m_pos=CameraPos;
m_right=vRight;
m_look=vLookAt;
m_up=vUp;
}
void CCamera::SetCameraPos(D3DXVECTOR3* pos)
{
m_pos = *pos;
}
D3DXVECTOR3* CCamera::GetCameraPos()
{
return &m_pos;
}
void CCamera::GetViewMatrix(D3DXMATRIX *pViewMat)
{
float PosRight = -D3DXVec3Dot( &m_right , &m_pos);
float PosUp = -D3DXVec3Dot( &m_up , &m_pos);
float PosLook = -D3DXVec3Dot( &m_look , &m_pos);
(*pViewMat)(0,0) = m_right.x;
(*pViewMat)(0,1) = m_up.x;
(*pViewMat)(0,2) = m_look.x;
(*pViewMat)(0,3) = 0.0f;
(*pViewMat)(1,0) = m_right.y;
(*pViewMat)(1,1) = m_up.y;
(*pViewMat)(1,2) = m_look.y;
(*pViewMat)(1,3) = 0.0f;
(*pViewMat)(2,0) = m_right.z;
(*pViewMat)(2,1) = m_up.z;
(*pViewMat)(2,2) = m_look.z;
(*pViewMat)(2,3) = 0.0f;
(*pViewMat)(3,0) = PosRight;
(*pViewMat)(3,1) = PosUp;
(*pViewMat)(3,2) = PosLook;
(*pViewMat)(3,3) = 1.0f;
}
void CCamera::RotateRightAxis(float angle)
{
D3DXMATRIX M;
D3DXMatrixRotationAxis(&M, &m_right,angle);
D3DXVec3TransformCoord(&m_look,&m_look,&M);
D3DXVec3TransformCoord(&m_up,&m_up,&M);
}
void CCamera::RotateUpAxis(float angle)
{
D3DXMATRIX M;
D3DXMatrixRotationAxis(&M, &m_up,angle);
D3DXVec3TransformCoord(&m_right,&m_right,&M);
D3DXVec3TransformCoord(&m_look,&m_look,&M);
}
void CCamera::RotateLookAxis(float angle)
{
D3DXMATRIX M;
D3DXMatrixRotationAxis(&M, &m_look,angle);
D3DXVec3TransformCoord(&m_right,&m_right,&M);
D3DXVec3TransformCoord(&m_up,&m_up,&M);
}
void CCamera::MoveAlongY(float yAdd){
Move(0.0f,yAdd,0.0f);
}
void CCamera::MoveAlongZ(float zAdd){
Move(0.0f,0.0f,zAdd);
}
void CCamera::MoveAlongX(float xAdd){
Move(xAdd,0.0f,0.0f);
}
void CCamera::Move(float xAdd,float yAdd,float zAdd){
m_pos.x=m_pos.x + xAdd;
m_pos.y=m_pos.y + yAdd;
m_pos.z=m_pos.z + zAdd;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -