📄 aabr.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 + -