📄 camera.cpp
字号:
#include "Camera.h"
Camera::Camera(D3DXVECTOR3 & vEye, D3DXVECTOR3 & vLookat, D3DXVECTOR3 & vUp)
{
m_vEye = vEye;
m_vLookat = vLookat;
m_vUp = vUp;
}
D3DXMATRIX * Camera::GetViewMatrix()
{
D3DXMatrixLookAtLH(&m_matView,&m_vEye,&m_vLookat,&m_vUp);
return &m_matView;
}
void Camera::MouseRotationX(float angle)
{
D3DXMATRIX matRotationX;
D3DXVECTOR3 vNewLookat,vTemp;
D3DXVec3Normalize(&m_vNewZAxis,&(m_vLookat-m_vEye));
D3DXVec3Cross(&m_vNewXAxis, &m_vNewZAxis, &m_vUp);
D3DXMatrixRotationAxis(&matRotationX, &m_vNewXAxis, angle);
D3DXVec3TransformCoord(&vNewLookat,&m_vNewZAxis,&matRotationX);
vNewLookat += m_vEye;
D3DXVec3Normalize(&vTemp,&(vNewLookat - m_vEye));
float fAngle = D3DXVec3Dot(&vTemp,&m_vUp);
if(fAngle < (-0.95f) || fAngle > 0.95f)
{
return ;
}
m_vLookat = vNewLookat;
}
void Camera::MouseRotationY(float angle)
{
D3DXMATRIX matRotationY;
D3DXVECTOR3 vLookat;
D3DXVec3Normalize(&m_vNewZAxis,&(m_vLookat-m_vEye));
D3DXMatrixRotationAxis(&matRotationY, &m_vUp, angle);
D3DXVec3TransformCoord(&vLookat,&m_vNewZAxis,&matRotationY);
vLookat += m_vEye;
m_vLookat = vLookat;
}
void Camera::MoveLeftRight(float distance)
{
D3DXVECTOR3 vMove;
D3DXVec3Normalize(&m_vNewZAxis,&(m_vLookat-m_vEye));
D3DXVec3Cross(&m_vNewXAxis, &m_vNewZAxis, &m_vUp);
D3DXVec3Normalize(&vMove, &m_vNewXAxis);
vMove *= distance;
m_vEye += vMove;
m_vLookat += vMove;
}
void Camera::MoveFrontBack(float distance)
{
D3DXVECTOR3 vMove = m_vLookat-m_vEye;
vMove.y = 0;
D3DXVec3Normalize( &vMove, &vMove);
vMove *= distance;
m_vEye += vMove;
m_vLookat += vMove;
}
//---------------------------------------------------------------------------------
//第3人称摄象机旋转
//---------------------------------------------------------------------------------
void Camera::ThirdPersonRotationX(float angle)
{
D3DXMATRIX matRotationX;
D3DXVECTOR3 vNewEye,vTemp;
//D3DXVec3Normalize(&m_vNewZAxis,&(m_vLookat-m_vEye));
D3DXVec3Cross(&m_vNewXAxis, &(m_vLookat-m_vEye), &m_vUp);
D3DXMatrixRotationAxis(&matRotationX, &m_vNewXAxis, angle);
D3DXVec3TransformCoord(&vNewEye,&(m_vEye-m_vLookat),&matRotationX);
vNewEye += m_vLookat;
D3DXVec3Normalize(&vTemp,&(m_vLookat - vNewEye));
float fAngle = D3DXVec3Dot(&vTemp,&m_vUp);
if(fAngle < (-0.95f) || fAngle > 0.95f)
{
return ;
}
m_vEye = vNewEye;
}
void Camera::ThirdPersonRotationY(float angle)
{
D3DXMATRIX matRotationY;
D3DXVECTOR3 vtemp;
D3DXMatrixRotationAxis(&matRotationY, &m_vUp, angle);
D3DXVec3TransformCoord(&vtemp,&(m_vEye-m_vLookat),&matRotationY);
m_vEye= m_vLookat+vtemp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -