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

📄 cbasecamera.cpp

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