📄 cbasecamera.cpp
字号:
#include "CBaseCamera.h"
#include "CGDevice.h"
CBaseCamera::CBaseCamera()
{
vCameraLook=D3DXVECTOR3(0.0f,0.0f,1.0f);
vCameraUp=D3DXVECTOR3(0.0f,1.0f,0.0f);
vCameraRight=D3DXVECTOR3(1.0f,0.0f,0.0f);
vCameraPos=D3DXVECTOR3(0.0f,0.0f,-5.0f);
fPitch=fYaw=fRoll=0.0f;
}
void CBaseCamera::Rotate(float Pitch,float Yaw,float Roll)
{
fPitch=Pitch;
fYaw=Yaw;
fRoll=Roll;
}
void CBaseCamera::Move(float x,float y,float z)
{
vCameraPos.x+=z*vCameraLook.x+y*vCameraUp.x+x*vCameraRight.x;
vCameraPos.y+=z*vCameraLook.y+y*vCameraUp.y+x*vCameraRight.y;
vCameraPos.z+=z*vCameraLook.z+y*vCameraUp.z+x*vCameraRight.z;
}
void CBaseCamera::UpdateCamera()
{
D3DXMATRIX matPitch,matYaw,matRoll;
//让三个坐标相互垂直
D3DXVec3Normalize(&vCameraLook,&vCameraLook);
D3DXVec3Cross(&vCameraRight,&vCameraUp,&vCameraLook);
D3DXVec3Normalize(&vCameraRight,&vCameraRight);
D3DXVec3Cross(&vCameraUp,&vCameraLook,&vCameraRight);
D3DXVec3Normalize(&vCameraUp,&vCameraUp);
D3DXMatrixRotationAxis(&matPitch,&vCameraRight,fPitch);
D3DXMatrixRotationAxis(&matYaw,&vCameraUp,fYaw);
D3DXMatrixRotationAxis(&matRoll,&vCameraLook,fRoll);
//让视向量绕顶向量旋转
D3DXVec3TransformCoord(&vCameraLook,&vCameraLook,&matYaw);
//让右方向向量绕顶向量旋转
D3DXVec3TransformCoord(&vCameraRight,&vCameraRight,&matYaw);
D3DXVec3TransformCoord(&vCameraLook,&vCameraLook,&matPitch);
D3DXVec3TransformCoord(&vCameraUp,&vCameraUp,&matPitch);
D3DXVec3TransformCoord(&vCameraRight,&vCameraRight,&matRoll);
D3DXVec3TransformCoord(&vCameraUp,&vCameraUp,&matRoll);
D3DXMATRIX view;
D3DXMatrixIdentity(&view);
view._11=vCameraRight.x;
view._12=vCameraUp.x;
view._13=vCameraLook.x;
view._21=vCameraRight.y;
view._22=vCameraUp.y;
view._23=vCameraLook.y;
view._31=vCameraRight.z;
view._32=vCameraUp.z;
view._33=vCameraLook.z;
view._41=-D3DXVec3Dot(&vCameraPos,&vCameraRight);
view._42=-D3DXVec3Dot(&vCameraPos,&vCameraUp);
view._43=-D3DXVec3Dot(&vCameraPos,&vCameraLook);
CGDevice *dev=CGDevice::GetInstance();
LPDIRECT3DDEVICE9 pdev=dev->GetDev();
pdev->SetTransform(D3DTS_VIEW,&view);
fPitch=0;
fYaw=0;
fRoll=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -