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

📄 camera.cpp

📁 Camera的源文件只是一部分Camera的源文件只是一部分
💻 CPP
字号:
#include "Camera.h"

Camera::Camera(D3DXVECTOR3 & vEye, D3DXVECTOR3 & vLookat, D3DXVECTOR3 & vUp)
{
	m_vEye = vEye;
	m_vLookat = vLookat;
	m_vUp = vUp;
	
}

D3DXMATRIX * Camera::GetViewMatrix()
{
	D3DXMatrixLookAtLH(&m_matView,&m_vEye,&m_vLookat,&m_vUp);
	
	return &m_matView;
}
void Camera::MouseRotationX(float angle)
{
	D3DXMATRIX matRotationX;
	D3DXVECTOR3 vNewLookat,vTemp;

	D3DXVec3Normalize(&m_vNewZAxis,&(m_vLookat-m_vEye));
	D3DXVec3Cross(&m_vNewXAxis, &m_vNewZAxis, &m_vUp);

	D3DXMatrixRotationAxis(&matRotationX, &m_vNewXAxis, angle);
	D3DXVec3TransformCoord(&vNewLookat,&m_vNewZAxis,&matRotationX);
	
	vNewLookat += m_vEye;

	D3DXVec3Normalize(&vTemp,&(vNewLookat - m_vEye));
	float fAngle = D3DXVec3Dot(&vTemp,&m_vUp);
	if(fAngle < (-0.95f) || fAngle > 0.95f)
	{
		return ;
	}

	m_vLookat = vNewLookat;
}

void Camera::MouseRotationY(float angle)
{
	D3DXMATRIX matRotationY;
	D3DXVECTOR3 vLookat;
	D3DXVec3Normalize(&m_vNewZAxis,&(m_vLookat-m_vEye));
	D3DXMatrixRotationAxis(&matRotationY, &m_vUp, angle);
	D3DXVec3TransformCoord(&vLookat,&m_vNewZAxis,&matRotationY);
	vLookat += m_vEye;
	m_vLookat = vLookat;

}
void Camera::MoveLeftRight(float distance)
{
	D3DXVECTOR3 vMove;

	D3DXVec3Normalize(&m_vNewZAxis,&(m_vLookat-m_vEye));
	D3DXVec3Cross(&m_vNewXAxis, &m_vNewZAxis, &m_vUp);
	D3DXVec3Normalize(&vMove, &m_vNewXAxis);
	vMove	  *= distance;

	m_vEye    += vMove;
	m_vLookat += vMove;
}
void Camera::MoveFrontBack(float distance)
{
	D3DXVECTOR3 vMove = m_vLookat-m_vEye;
	vMove.y = 0;
	D3DXVec3Normalize( &vMove, &vMove);
	vMove	  *= distance;

	m_vEye    += vMove;
	m_vLookat += vMove;
}
//---------------------------------------------------------------------------------
//第3人称摄象机旋转
//---------------------------------------------------------------------------------
void Camera::ThirdPersonRotationX(float angle)
{
	D3DXMATRIX matRotationX;
	D3DXVECTOR3 vNewEye,vTemp;

	//D3DXVec3Normalize(&m_vNewZAxis,&(m_vLookat-m_vEye));
	D3DXVec3Cross(&m_vNewXAxis, &(m_vLookat-m_vEye), &m_vUp);

	D3DXMatrixRotationAxis(&matRotationX, &m_vNewXAxis, angle);
	D3DXVec3TransformCoord(&vNewEye,&(m_vEye-m_vLookat),&matRotationX);
	
	vNewEye += m_vLookat;

	D3DXVec3Normalize(&vTemp,&(m_vLookat - vNewEye));
	float fAngle = D3DXVec3Dot(&vTemp,&m_vUp);
	if(fAngle < (-0.95f) || fAngle > 0.95f)
	{
		return ;
	}

	m_vEye = vNewEye;
}

void Camera::ThirdPersonRotationY(float angle)
{
	D3DXMATRIX matRotationY;
	D3DXVECTOR3 vtemp;
	
	D3DXMatrixRotationAxis(&matRotationY, &m_vUp, angle);
	D3DXVec3TransformCoord(&vtemp,&(m_vEye-m_vLookat),&matRotationY);

	m_vEye= m_vLookat+vtemp;

}

⌨️ 快捷键说明

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