⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ccamera.cpp

📁 zip压缩,解压缩 英文版本的,大家凑货看
💻 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 + -