📄 ccamera.cpp
字号:
#include "CCamera.h"
#include "CGDevice.h"
CCamera::CCamera():rot_left(0.0f),rot_up(0.0f),move_x(0.0f),move_y(0.0f),move_z(0.0f)
{
base_vEyePt=D3DXVECTOR3(0.0f,0.0f,0.0f);
base_vLookatPt=D3DXVECTOR3(0.0f,0.0f,1.0f);
base_vUpVec=D3DXVECTOR3(0.0f,1.0f,0.0f);
pos_vEyePt=D3DXVECTOR3(0.0f,0.0f,0.0f);
}
CCamera::~CCamera()
{
}
void CCamera::InitCamera(float eyex, float eyey, float eyez, float lookx, float looky, float lookz, float upx, float upy, float upz)
{
base_vEyePt=D3DXVECTOR3(eyex,eyey,eyez);
base_vLookatPt=base_vEyePt+D3DXVECTOR3(lookx,looky,lookz);
base_vUpVec=D3DXVECTOR3(upx,upy,upz);
pos_vEyePt=base_vEyePt;
rot_left=0.0f;
rot_up=0.0f;
move_x=0.0f;
move_y=0.0f;
move_z=0.0f;
}
void CCamera::Rotate(float deltaLeft,float deltaUp)
{
rot_left+=deltaLeft;
rot_up+=deltaUp;
}
void CCamera::Move(float deltaX,float deltaY,float deltaZ)
{
move_x=deltaX;
move_y=deltaY;
move_z=deltaZ;
}
void CCamera::SetCamera()
{
CGDevice *dev=CGDevice::GetInstance();
LPDIRECT3DDEVICE9 pdev=dev->GetDev();
D3DXMATRIX matY,matX,mat;
//位置变换
//本次位移量
D3DXVECTOR3 eye(move_x,move_y,move_z);
move_x=0.0f;
move_y=0.0f;
move_z=0.0f;
//将位移量旋转到方向上,得到相应位移向量
D3DXMatrixRotationY(&matY,rot_left);
D3DXMatrixRotationX(&matX,rot_up);
mat=matY*matX;
dev->VertexMulMatrix(&eye,&mat);
//将位移向量加到当前的位置向量上得到新的位置向量
pos_vEyePt+=eye;
//观察点变换
//对观察方向的向量进行旋转,得到当前观察方向
D3DXVECTOR3 look(base_vLookatPt);
dev->VertexMulMatrix(&look,&mat);
//单位化视方向
D3DXVECTOR3 nlook;
D3DXVec3Normalize(&nlook,&look);
//得到视点
nlook+=pos_vEyePt;
D3DXMatrixLookAtLH(&mat,&pos_vEyePt,&nlook,&base_vUpVec);
pdev->SetTransform(D3DTS_VIEW,&mat);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -