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

📄 glcamera.cpp

📁 实战粒子系统例程
💻 CPP
字号:
/*
	glcamera.cpp - Camera class
	Copyright (c) HalfLucifer, 2001.11.18
*/
#include "glcamera.h"

GLcamera::GLcamera(GLvector pos, GLvector view, GLvector up)
:  m_Position(pos), m_ViewPoint(view), m_UpVector(up)
{
	gluLookAt( m_Position[0], m_Position[1], m_Position[2],
		       m_ViewPoint[0], m_ViewPoint[1], m_ViewPoint[2],
			   m_UpVector[0], m_UpVector[1], m_UpVector[2] );
}

void GLcamera::Update()
{
	gluLookAt( m_Position[0], m_Position[1], m_Position[2],
		       m_ViewPoint[0], m_ViewPoint[1], m_ViewPoint[2],
			   m_UpVector[0], m_UpVector[1], m_UpVector[2] );
}

void GLcamera::Move(float vec)
{
	GLvector delta(m_ViewPoint[0]-m_Position[0], 0, m_ViewPoint[2]-m_Position[2]);
	m_Position += delta * vec;
	m_ViewPoint += delta * vec;
}

void GLcamera::Strafe(float vec)
{
	GLvector delta;
	delta.CrossProduct(m_UpVector, (m_ViewPoint-m_Position));
	m_Position += delta * vec;
	m_ViewPoint += delta * vec;
}

void GLcamera::ViewMove()
{
	POINT mouse;
	int midx = 800 >> 1;			// Screen width
	int midy = 600 >> 1;			// Screen height
	float DeltaY = 0.0f;
	float RotateY = 0.0f;

	GetCursorPos(&mouse);

	if ((mouse.x==midx) && (mouse.y==midy))
		return;

	SetCursorPos(midx, midy);

	RotateY = (float)(midx-mouse.x)/XMOUSE_SENSITIVE;
	DeltaY  = (float)(midy-mouse.y)/YMOUSE_SENSITIVE;

	m_ViewPoint[1] += DeltaY;
	RotateView(0, -RotateY, 0);
}

void GLcamera::RotateView(float x, float y, float z)
{
	GLvector v = m_ViewPoint - m_Position;

	if (x)
	{
		m_ViewPoint[1] = (float)(m_Position[1] + cos(x)*v[1] - sin(x)*v[2]);
		m_ViewPoint[2] = (float)(m_Position[2] + sin(x)*v[1] + cos(x)*v[2]);
	}

	if (y)
	{
		m_ViewPoint[0] = (float)(m_Position[0] + cos(y)*v[0] - sin(y)*v[2]);
		m_ViewPoint[2] = (float)(m_Position[2] + sin(y)*v[0] + cos(y)*v[2]);
	}

	if (z)
	{
		m_ViewPoint[0] = (float)(m_Position[0] + sin(z)*v[1] + cos(z)*v[0]);		
		m_ViewPoint[1] = (float)(m_Position[1] + cos(z)*v[1] - sin(z)*v[0]);
	}
}

GLvector GLcamera::GetRightVector()
{
	GLvector v;
	v.CrossProduct((m_ViewPoint-m_Position), m_UpVector);
	v.Normalize();
	return v;
}

⌨️ 快捷键说明

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