Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals

/Users/blackie/Documents/myRepository/phobosengine-vc2005/phobosengine/phobosengine/AABB.cpp

Go to the documentation of this file.
00001 
00002 
00003 #include "AABB.h"
00004 
00005 #include "Renderer.h"
00006 
00007 
00008 namespace pge {
00009 
00010 
00011         //****************************************************************************
00012         //
00013         //
00014         //
00015         //****************************************************************************
00016         AABB::AABB(void) {
00017                 m_minX = 0.0f;
00018                 m_minY = 0.0f;
00019                 m_minZ = 0.0f;
00020                 m_maxX = 0.0f;
00021                 m_maxY = 0.0f;
00022                 m_maxZ = 0.0f;
00023         }
00024 
00025 
00026         //****************************************************************************
00027         //
00028         //
00029         //
00030         //****************************************************************************
00031         AABB::AABB(float minX, float minY, float minZ, float maxX, float maxY, float maxZ) {
00032                 m_minX = minX;
00033                 m_minY = minY;
00034                 m_minZ = minZ;
00035                 m_maxX = maxX;
00036                 m_maxY = maxY;
00037                 m_maxZ = maxZ;
00038         }
00039 
00040 
00041         //****************************************************************************
00042         //
00043         //
00044         //
00045         //****************************************************************************
00046         AABB::AABB(const AABB &copy) {
00047                 m_minX = copy.m_minX;
00048                 m_minY = copy.m_minY;
00049                 m_minZ = copy.m_minZ;
00050                 m_maxX = copy.m_maxX;
00051                 m_maxY = copy.m_maxY;
00052                 m_maxZ = copy.m_maxZ;
00053         }
00054 
00055 
00056         //****************************************************************************
00057         //
00058         //
00059         //
00060         //****************************************************************************
00061         AABB::~AABB(void) {
00062         }
00063 
00064 
00065         //****************************************************************************
00066         //
00067         //
00068         //
00069         //****************************************************************************
00070         bool AABB::isAABBCompletelyInside(AABB *boundingBox) {
00071                 if(!isPointInside(boundingBox->m_minX, boundingBox->m_minY, boundingBox->m_minZ)) {
00072                         return false;
00073                 }
00074                 if(!isPointInside(boundingBox->m_maxX, boundingBox->m_minY, boundingBox->m_minZ)) {
00075                         return false;
00076                 }
00077                 if(!isPointInside(boundingBox->m_minX, boundingBox->m_maxY, boundingBox->m_minZ)) {
00078                         return false;
00079                 }
00080                 if(!isPointInside(boundingBox->m_maxX, boundingBox->m_maxY, boundingBox->m_minZ)) {
00081                         return false;
00082                 }
00083                 if(!isPointInside(boundingBox->m_minX, boundingBox->m_minY, boundingBox->m_maxZ)) {
00084                         return false;
00085                 }
00086                 if(!isPointInside(boundingBox->m_maxX, boundingBox->m_minY, boundingBox->m_maxZ)) {
00087                         return false;
00088                 }
00089                 if(!isPointInside(boundingBox->m_minX, boundingBox->m_maxY, boundingBox->m_maxZ)) {
00090                         return false;
00091                 }
00092                 if(!isPointInside(boundingBox->m_maxX, boundingBox->m_maxY, boundingBox->m_maxZ)) {
00093                         return false;
00094                 }
00095                 return true;
00096         }
00097 
00098                 
00099         //****************************************************************************
00100         //
00101         //
00102         //
00103         //****************************************************************************
00104         bool AABB::isAABBInsideOrOverlapping(AABB *boundingBox) {
00105                 if(isPointInside(boundingBox->m_minX, boundingBox->m_minY, boundingBox->m_minZ)) {
00106                         return true;
00107                 }
00108                 if(isPointInside(boundingBox->m_maxX, boundingBox->m_minY, boundingBox->m_minZ)) {
00109                         return true;
00110                 }
00111                 if(isPointInside(boundingBox->m_minX, boundingBox->m_maxY, boundingBox->m_minZ)) {
00112                         return true;
00113                 }
00114                 if(isPointInside(boundingBox->m_maxX, boundingBox->m_maxY, boundingBox->m_minZ)) {
00115                         return true;
00116                 }
00117                 if(isPointInside(boundingBox->m_minX, boundingBox->m_minY, boundingBox->m_maxZ)) {
00118                         return true;
00119                 }
00120                 if(isPointInside(boundingBox->m_maxX, boundingBox->m_minY, boundingBox->m_maxZ)) {
00121                         return true;
00122                 }
00123                 if(isPointInside(boundingBox->m_minX, boundingBox->m_maxY, boundingBox->m_maxZ)) {
00124                         return true;
00125                 }
00126                 if(isPointInside(boundingBox->m_maxX, boundingBox->m_maxY, boundingBox->m_maxZ)) {
00127                         return true;
00128                 }
00129                 return false;
00130         }
00131 
00132 
00133         //****************************************************************************
00134         //
00135         //
00136         //
00137         //****************************************************************************
00138         bool AABB::isPointInside(const Vector3f &point) {
00139                 return isPointInside(point.m_v[0], point.m_v[1], point.m_v[2]);
00140         }
00141 
00142 
00143         //****************************************************************************
00144         //
00145         //
00146         //
00147         //****************************************************************************
00148         bool AABB::isPointInside(float x, float y, float z) {
00149                 if (x >= m_minX && x <= m_maxX && y >= m_minY && y <= m_maxY && z >= m_minZ && z <= m_maxZ) {
00150                         return true;
00151                 }
00152                 return false;
00153         }
00154 
00155 
00156         //****************************************************************************
00157         //
00158         //
00159         //
00160         //****************************************************************************
00161         Vector3f AABB::getCenter(void) {
00162                 Vector3f center = Vector3f((m_maxX + m_minX) / 2.0f, (m_maxY + m_minY) / 2.0f, (m_maxZ + m_minZ) / 2.0f);
00163                 return center;
00164         }
00165 
00166 
00167         //****************************************************************************
00168         //
00169         //
00170         //
00171         //****************************************************************************
00172         Vector3f AABB::getBottomCenter(void) {
00173                 Vector3f center = Vector3f((m_maxX + m_minX) / 2.0f, m_minY, (m_maxZ + m_minZ) / 2.0f);
00174                 return center;
00175         }
00176 
00177 
00178         //****************************************************************************
00179         //
00180         //
00181         //
00182         //****************************************************************************
00183         void AABB::renderSolid(Vector3f color) {
00184                 renderer::color3f(color);
00185                 glDisable(GL_TEXTURE_2D);
00186 
00187                 glBegin(GL_QUADS);
00188                 // Front
00189                 renderer::vertex3f(m_minX, m_minY, m_minZ);
00190                 renderer::vertex3f(m_maxX, m_minY, m_minZ);
00191                 renderer::vertex3f(m_maxX, m_maxY, m_minZ);
00192                 renderer::vertex3f(m_minX, m_maxY, m_minZ);
00193 
00194                 // Back
00195                 renderer::vertex3f(m_minX, m_minY, m_maxZ);
00196                 renderer::vertex3f(m_maxX, m_minY, m_maxZ);
00197                 renderer::vertex3f(m_maxX, m_maxY, m_maxZ);
00198                 renderer::vertex3f(m_minX, m_maxY, m_maxZ);
00199 
00200                 // Top
00201                 renderer::vertex3f(m_minX, m_maxY, m_minZ);
00202                 renderer::vertex3f(m_maxX, m_maxY, m_minZ);
00203                 renderer::vertex3f(m_maxX, m_maxY, m_maxZ);
00204                 renderer::vertex3f(m_minX, m_maxY, m_maxZ);
00205 
00206                 // Bottom
00207                 renderer::vertex3f(m_minX, m_minY, m_minZ);
00208                 renderer::vertex3f(m_maxX, m_minY, m_minZ);
00209                 renderer::vertex3f(m_maxX, m_minY, m_maxZ);
00210                 renderer::vertex3f(m_minX, m_minY, m_maxZ);
00211 
00212                 // Left
00213                 renderer::vertex3f(m_minX, m_minY, m_maxZ);
00214                 renderer::vertex3f(m_minX, m_minY, m_minZ);
00215                 renderer::vertex3f(m_minX, m_maxY, m_minZ);
00216                 renderer::vertex3f(m_minX, m_maxY, m_maxZ);
00217 
00218                 // Right
00219                 renderer::vertex3f(m_maxX, m_minY, m_minZ);
00220                 renderer::vertex3f(m_maxX, m_minY, m_maxZ);
00221                 renderer::vertex3f(m_maxX, m_maxY, m_maxZ);
00222                 renderer::vertex3f(m_maxX, m_maxY, m_minZ);
00223                 glEnd();
00224         }
00225 
00226 
00227         //****************************************************************************
00228         //
00229         //
00230         //
00231         //****************************************************************************
00232         void AABB::renderWireframe(Vector3f color) {
00233                 renderer::color3f(color);
00234                 glDisable(GL_TEXTURE_2D);
00235 
00236                 glBegin(GL_LINES);
00237                 // Front
00238                 renderer::vertex3f(m_minX, m_minY, m_minZ);
00239                 renderer::vertex3f(m_maxX, m_minY, m_minZ);
00240                 renderer::vertex3f(m_maxX, m_maxY, m_minZ);
00241                 renderer::vertex3f(m_minX, m_maxY, m_minZ);
00242 
00243                 // Back
00244                 renderer::vertex3f(m_minX, m_minY, m_maxZ);
00245                 renderer::vertex3f(m_maxX, m_minY, m_maxZ);
00246                 renderer::vertex3f(m_maxX, m_maxY, m_maxZ);
00247                 renderer::vertex3f(m_minX, m_maxY, m_maxZ);
00248 
00249                 // Left
00250                 renderer::vertex3f(m_minX, m_minY, m_maxZ);
00251                 renderer::vertex3f(m_minX, m_maxY, m_maxZ);
00252                 renderer::vertex3f(m_minX, m_minY, m_minZ);
00253                 renderer::vertex3f(m_minX, m_maxY, m_minZ);
00254                 renderer::vertex3f(m_minX, m_minY, m_maxZ);
00255                 renderer::vertex3f(m_minX, m_minY, m_minZ);
00256                 renderer::vertex3f(m_minX, m_maxY, m_minZ);
00257                 renderer::vertex3f(m_minX, m_maxY, m_maxZ);
00258 
00259                 // Right
00260                 renderer::vertex3f(m_maxX, m_minY, m_maxZ);
00261                 renderer::vertex3f(m_maxX, m_maxY, m_maxZ);
00262                 renderer::vertex3f(m_maxX, m_minY, m_minZ);
00263                 renderer::vertex3f(m_maxX, m_maxY, m_minZ);
00264                 renderer::vertex3f(m_maxX, m_minY, m_maxZ);
00265                 renderer::vertex3f(m_maxX, m_minY, m_minZ);
00266                 renderer::vertex3f(m_maxX, m_maxY, m_minZ);
00267                 renderer::vertex3f(m_maxX, m_maxY, m_maxZ);
00268                 glEnd();
00269         }
00270 };

Generated on Mon Oct 16 12:08:10 2006 for Phobosengine by doxygen 1.3.4