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

📄 aabr.cpp

📁 小型的3D游戏引擎
💻 CPP
字号:
#include "aabr.h"
#include <windows.h>
#include <gl/gl.h>

GcAABR::GcAABR()
{
	m_orthogonals[0] = GcVector3(1, 0, 0);
	m_orthogonals[1] = GcVector3(0, 1, 0);
	m_orthogonals[2] = GcVector3(0, 0, 1);
}


GcAABR::GcAABR( GcVector3 & v )
{
	m_extents = v;

	GcAABR();
//	m_orthogonals[0] = GcVector3(1, 0, 0);
//	m_orthogonals[1] = GcVector3(0, 1, 0);
//	m_orthogonals[2] = GcVector3(0, 0, 1);
}

GcAABR::GcAABR( GcVector3 & v, GcVector3 & pos )
{
	GcAABR();

	m_extents = v;
	SetTranslation(pos);
}

GcAABR::GcAABR( GcAABR & aabb )
{
	m_extents = aabb.GetExtents();
	
	m_orthogonals[0] = aabb.GetOrthogonal(0);
	m_orthogonals[1] = aabb.GetOrthogonal(1);
	m_orthogonals[2] = aabb.GetOrthogonal(2);

	SetTranslation( aabb.GetWorldTranslation() );
}

void GcAABR::RenderOutlines()
{
	glPushMatrix();
		
		glMultMatrixf(GetWorldMatrix());
		
		glLineWidth(2);
		glColor3f(0.5f, 0.0f, 0.0f);
		
		glBegin( GL_LINES );
			
			// Front top
			glVertex3f( -m_extents.x, m_extents.y, -m_extents.z );
			glVertex3f( m_extents.z, m_extents.y, -m_extents.z );
			
			// Back top
			glVertex3f( -m_extents.x, m_extents.y, m_extents.z  );
			glVertex3f( m_extents.z, m_extents.y, m_extents.z );

			// Left top
			glVertex3f( -m_extents.x, m_extents.y, -m_extents.z );
			glVertex3f( -m_extents.x, m_extents.y, m_extents.z  );

			// Right top
			glVertex3f( m_extents.x, m_extents.y, -m_extents.z );
			glVertex3f( m_extents.x, m_extents.y, m_extents.z  );

			
			
			// Front bottom
			glVertex3f( -m_extents.x, -m_extents.y, -m_extents.z );
			glVertex3f( m_extents.z, -m_extents.y, -m_extents.z );
			
			// Back bottom
			glVertex3f( -m_extents.x, -m_extents.y, m_extents.z  );
			glVertex3f( m_extents.z, -m_extents.y, m_extents.z );

			// Left bottom
			glVertex3f( -m_extents.x, -m_extents.y, -m_extents.z );
			glVertex3f( -m_extents.x, -m_extents.y, m_extents.z  );

			// Right bottom
			glVertex3f( m_extents.x, -m_extents.y, -m_extents.z );
			glVertex3f( m_extents.x, -m_extents.y, m_extents.z  );


			
			
			// Front left
			glVertex3f( -m_extents.x, m_extents.y, -m_extents.z );
			glVertex3f( -m_extents.x, -m_extents.y, -m_extents.z );

			// Front right
			glVertex3f( m_extents.z, m_extents.y, -m_extents.z );
			glVertex3f( m_extents.z, -m_extents.y, -m_extents.z );

			// Back left
			glVertex3f( -m_extents.x, m_extents.y, m_extents.z  );
			glVertex3f( -m_extents.x, -m_extents.y, m_extents.z  );

			// Back right
			glVertex3f( m_extents.z, m_extents.y, m_extents.z );
			glVertex3f( m_extents.z, -m_extents.y, m_extents.z );

		glEnd();

		glLineWidth(1);
	
	glPopMatrix();
}

const bool GcAABR::Intersects( GcAABR * box )
{
	bool collides = false;

	GcVector3 & positionA = GetWorldTranslation();
	GcVector3 & positionB = box->GetWorldTranslation();

	GcVector3 & extentsA = m_extents;
	GcVector3 & extentsB = box->GetExtents();

	
	const GcVector3 T = positionB - positionA;//vector from A to B
	
	
	if( fabs(T.x) <= (extentsA.x + extentsB.x) &&
		fabs(T.y) <= (extentsA.y + extentsB.y) &&
		fabs(T.z) <= (extentsA.z + extentsB.z) )
		return true;


	return false;
}

⌨️ 快捷键说明

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