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

📄 camera.cpp

📁 里内面有两个关于地形的模拟的范例,仔细看一下会收获不小啊
💻 CPP
字号:
#include "Camera.h"

CCamera::CCamera()
{
	m_pos   = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
	m_right = D3DXVECTOR3(1.0f, 0.0f, 0.0f);
	m_look  = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
	m_up    = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
}

CCamera::~CCamera(){}

void CCamera::InitCamera(D3DXVECTOR3& CameraPos,D3DXVECTOR3& LookAtPos,D3DXVECTOR3& UpPos){
	D3DXVECTOR3 vLookAt=LookAtPos-CameraPos;
	D3DXVECTOR3 vUp=UpPos;

	D3DXVec3Normalize(&vLookAt, &vLookAt);
	
	D3DXVECTOR3 vRight;
	D3DXVec3Cross(&vRight, &vUp, &vLookAt );  //DirectX可使用左手判断叉积方向 
	D3DXVec3Normalize(&vRight,&vRight);

	D3DXVec3Cross(&vUp, &vLookAt, &vRight);
	D3DXVec3Normalize(&vUp,&vUp);

	m_pos=CameraPos;
	m_right=vRight;
	m_look=vLookAt;
	m_up=vUp;
}

void CCamera::SetCameraPos(D3DXVECTOR3* pos)
{
	m_pos = *pos;
}

D3DXVECTOR3* CCamera::GetCameraPos()
{
	return &m_pos;
}

void CCamera::GetViewMatrix(D3DXMATRIX *pViewMat)
{
	float PosRight = -D3DXVec3Dot( &m_right , &m_pos);
	float PosUp = -D3DXVec3Dot( &m_up , &m_pos);
	float PosLook = -D3DXVec3Dot( &m_look , &m_pos);

	(*pViewMat)(0,0) = m_right.x;
	(*pViewMat)(0,1) = m_up.x;
	(*pViewMat)(0,2) = m_look.x;
	(*pViewMat)(0,3) = 0.0f;

	(*pViewMat)(1,0) = m_right.y;
	(*pViewMat)(1,1) = m_up.y;
	(*pViewMat)(1,2) = m_look.y;
	(*pViewMat)(1,3) = 0.0f;

	(*pViewMat)(2,0) = m_right.z;
	(*pViewMat)(2,1) = m_up.z;
	(*pViewMat)(2,2) = m_look.z;
	(*pViewMat)(2,3) = 0.0f;

	(*pViewMat)(3,0) = PosRight;
	(*pViewMat)(3,1) = PosUp;
	(*pViewMat)(3,2) = PosLook;
	(*pViewMat)(3,3) = 1.0f;
}

void CCamera::RotateRightAxis(float angle)
{
	D3DXMATRIX M;
	D3DXMatrixRotationAxis(&M, &m_right,angle);
	D3DXVec3TransformCoord(&m_look,&m_look,&M);
	D3DXVec3TransformCoord(&m_up,&m_up,&M);
}

void CCamera::RotateUpAxis(float angle)
{
	D3DXMATRIX M;
	D3DXMatrixRotationAxis(&M, &m_up,angle);
	D3DXVec3TransformCoord(&m_right,&m_right,&M);
	D3DXVec3TransformCoord(&m_look,&m_look,&M);
}

void CCamera::RotateLookAxis(float angle)
{
	D3DXMATRIX M;
	D3DXMatrixRotationAxis(&M, &m_look,angle);
	D3DXVec3TransformCoord(&m_right,&m_right,&M);
	D3DXVec3TransformCoord(&m_up,&m_up,&M);
}

void CCamera::MoveAlongY(float yAdd){
	Move(0.0f,yAdd,0.0f);
}

void CCamera::MoveAlongZ(float zAdd){
	Move(0.0f,0.0f,zAdd);
}

void CCamera::MoveAlongX(float xAdd){
	Move(xAdd,0.0f,0.0f);
}

void CCamera::Move(float xAdd,float yAdd,float zAdd){
	m_pos.x=m_pos.x + xAdd;
	m_pos.y=m_pos.y + yAdd;
	m_pos.z=m_pos.z + zAdd;
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -