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

📄 camera.cpp

📁 用directx实现的天空盒 使用纹理贴图
💻 CPP
字号:
#include "Camera.h"

CCamera::CCamera()
{
	g_vPos		= D3DXVECTOR3(0.0f, 0.0f, 0.0f);

	g_vRight	= D3DXVECTOR3(1.0f, 0.0f, 0.0f);
	g_vUp		= D3DXVECTOR3(0.0f, 1.0f, 0.0f);
	g_vLook		= D3DXVECTOR3(0.0f, 0.0f, 1.0f);
}

CCamera::~CCamera()
{
}

void CCamera::strafe(float units)
{
	g_vPos += D3DXVECTOR3(g_vRight.x, 0.0f, g_vRight.z) * units;
}

void CCamera::fly(float units)
{
	g_vPos.y +=  units;
}

void CCamera::walk(float units)
{
	g_vPos += D3DXVECTOR3(g_vLook.x, 0.0f, g_vLook.z) * units;
}

void CCamera::pitch(float angle)
{
	D3DXMATRIX T;
	D3DXMatrixRotationAxis(&T, &g_vRight, angle);

	D3DXVec3TransformCoord(&g_vLook, &g_vLook, &T);
	D3DXVec3TransformCoord(&g_vUp, &g_vUp, &T);
}

void CCamera::yaw(float angle)
{
	D3DXMATRIX T;
	D3DXMatrixRotationY(&T, angle);

	D3DXVec3TransformCoord(&g_vLook, &g_vLook, &T);
	D3DXVec3TransformCoord(&g_vRight, &g_vRight, &T);
}

void CCamera::getViewMatrix(D3DXMATRIX *V)
{
	D3DXVec3Normalize(&g_vLook, &g_vLook);

	D3DXVec3Cross(&g_vUp, &g_vLook, &g_vRight);
	D3DXVec3Normalize(&g_vUp, &g_vUp);

	D3DXVec3Cross(&g_vRight, &g_vUp, &g_vLook);
	D3DXVec3Normalize(&g_vRight, &g_vRight);

	float x = -D3DXVec3Dot(&g_vRight, &g_vPos);
	float y = -D3DXVec3Dot(&g_vUp   , &g_vPos);
	float z = -D3DXVec3Dot(&g_vLook , &g_vPos);

	V->_11 = g_vRight.x; V->_12 = g_vUp.x; V->_13 = g_vLook.x; V->_14 = 0.0f;
	V->_21 = g_vRight.y; V->_22 = g_vUp.y; V->_23 = g_vLook.y; V->_24 = 0.0f;
	V->_31 = g_vRight.z; V->_32 = g_vUp.z; V->_33 = g_vLook.z; V->_34 = 0.0f;
	V->_41 = x         ; V->_42 = y      ; V->_43 = z        ; V->_44 = 1.0f;
}

void CCamera::getPosition(D3DXVECTOR3 *pos)
{
	*pos = g_vPos;
}

void CCamera::setPosition(const D3DXVECTOR3 *pos)
{
	g_vPos = *pos;
}

void CCamera::ProcInput()
{ 
	float fDelta = 0.0008f;

	POINT pt;
	GetCursorPos( &pt );
	static DWORD beginX = pt.x;
	static DWORD beginY = pt.y;
	static DWORD mouseX = pt.x;
	static DWORD mouseY = pt.y;

	GetCursorPos( &pt );
	int dx = pt.x - mouseX;
	int dy = pt.y - mouseY;

	pitch((float)dy * fDelta);
	yaw((float)dx * fDelta);

	SetCursor(NULL);

	SetCursorPos(beginX, beginY);
	mouseX = beginX;
	mouseY = beginY;

	if(KEYDOWN('W'))
	{
		walk(100.0f * fDelta);
	}
	if(KEYDOWN('S'))
	{
		walk(-100.0f * fDelta);
	}
	if(KEYDOWN('A'))
	{
		strafe(-100.0f * fDelta);
	}
	if(KEYDOWN('D'))
	{
		strafe(100.0f * fDelta);
	}

	return;
}

⌨️ 快捷键说明

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