From: <axl...@us...> - 2009-03-01 21:10:19
|
Revision: 156 http://hgengine.svn.sourceforge.net/hgengine/?rev=156&view=rev Author: axlecrusher Date: 2009-03-01 21:10:09 +0000 (Sun, 01 Mar 2009) Log Message: ----------- Clean up bounding box Modified Paths: -------------- Mercury2/beerhall.hgmdl Mercury2/scenegraph.xml Mercury2/src/HGMDLMesh.cpp Mercury2/src/HGMDLMesh.h Mercury2/src/MercuryVBO.cpp Mercury2/src/MercuryVBO.h Added Paths: ----------- Mercury2/src/BoundingBox.cpp Mercury2/src/BoundingBox.h Modified: Mercury2/beerhall.hgmdl =================================================================== (Binary files differ) Modified: Mercury2/scenegraph.xml =================================================================== --- Mercury2/scenegraph.xml 2009-03-01 20:22:29 UTC (rev 155) +++ Mercury2/scenegraph.xml 2009-03-01 21:10:09 UTC (rev 156) @@ -28,8 +28,8 @@ </node> <node type="rotatornode" movz="-2" movx="2" scalex="0.25" scaley="0.25" scalez="0.25" > <node type="renderablenode"> - <asset type="texture" file="test.bmp"/> - <asset type="hgmdlmodel" file="beerhall.hgmdl"/> + <asset type="texture" file="gunther.png"/> + <asset type="hgmdlmodel" file="gunther.hgmdl"/> </node> </node> </SceneGraph> Added: Mercury2/src/BoundingBox.cpp =================================================================== --- Mercury2/src/BoundingBox.cpp (rev 0) +++ Mercury2/src/BoundingBox.cpp 2009-03-01 21:10:09 UTC (rev 156) @@ -0,0 +1,97 @@ +#include <GL/gl.h> +#include <GL/glext.h> +#include <BoundingBox.h> + +void BoundingBox::LoadFromBinary(char* data) +{ + memcpy(m_center, data, sizeof(float)*3); + memcpy(m_extend, data+(sizeof(float)*3), sizeof(float)*3); +} + +RenderableBoundingBox::RenderableBoundingBox(const BoundingBox* bb) + :MercuryAsset(), m_bb(bb) +{ +} + +void RenderableBoundingBox::Render(MercuryNode* node) +{ + const float* center = m_bb->GetCenter(); + const float* extend = m_bb->GetExtend(); + + glPushAttrib( GL_CURRENT_BIT ); + glBegin(GL_LINES); + glColor3f(0,1.0f,0); + + //front + glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]); + glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]); + glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]); + glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]); + glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]); + glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); + glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); + glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]); + + //back + glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]); + glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); + glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]); + glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); + glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]); + glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]); + glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]); + glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]); + + //top + glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]); + glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]); + glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]); + glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); + + //bottom + glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); + glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]); + glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]); + glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]); + + glEnd(); + + glPointSize(4); + glBegin(GL_POINTS); + glVertex3f(center[0], center[1], center[2]); + glEnd(); + + glPopAttrib( ); +} + +/**************************************************************************** + * Copyright (C) 2008 by Joshua Allen * + * * + * * + * All rights reserved. * + * * + * Redistribution and use in source and binary forms, with or without * + * modification, are permitted provided that the following conditions * + * are met: * + * * Redistributions of source code must retain the above copyright * + * notice, this list of conditions and the following disclaimer. * + * * Redistributions in binary form must reproduce the above * + * copyright notice, this list of conditions and the following * + * disclaimer in the documentation and/or other materials provided * + * with the distribution. * + * * Neither the name of the Mercury Engine nor the names of its * + * contributors may be used to endorse or promote products derived * + * from this software without specific prior written permission. * + * * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * + ***************************************************************************/ Added: Mercury2/src/BoundingBox.h =================================================================== --- Mercury2/src/BoundingBox.h (rev 0) +++ Mercury2/src/BoundingBox.h 2009-03-01 21:10:09 UTC (rev 156) @@ -0,0 +1,59 @@ +#ifndef BOUNDINGBOX_H +#define BOUNDINGBOX_H + +#include <MercuryAsset.h> + +class BoundingBox +{ + public: + void LoadFromBinary(char* data); + inline const float* GetCenter() const { return m_center; } + inline const float* GetExtend() const { return m_extend; } + private: + float m_center[3]; + float m_extend[3]; +}; + +class RenderableBoundingBox : public MercuryAsset +{ + public: + RenderableBoundingBox(const BoundingBox* bb); + virtual void Render(MercuryNode* node); + + private: + const BoundingBox* m_bb; +}; + +#endif + +/**************************************************************************** + * Copyright (C) 2008 by Joshua Allen * + * * + * * + * All rights reserved. * + * * + * Redistribution and use in source and binary forms, with or without * + * modification, are permitted provided that the following conditions * + * are met: * + * * Redistributions of source code must retain the above copyright * + * notice, this list of conditions and the following disclaimer. * + * * Redistributions in binary form must reproduce the above * + * copyright notice, this list of conditions and the following * + * disclaimer in the documentation and/or other materials provided * + * with the distribution. * + * * Neither the name of the Mercury Engine nor the names of its * + * contributors may be used to endorse or promote products derived * + * from this software without specific prior written permission. * + * * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * + ***************************************************************************/ Modified: Mercury2/src/HGMDLMesh.cpp =================================================================== --- Mercury2/src/HGMDLMesh.cpp 2009-03-01 20:22:29 UTC (rev 155) +++ Mercury2/src/HGMDLMesh.cpp 2009-03-01 21:10:09 UTC (rev 156) @@ -1,15 +1,5 @@ #include <HGMDLMesh.h> -HGMDLMesh::HGMDLMesh() - :MercuryVBO(), m_boundingBox(NULL) -{ -} - -HGMDLMesh::~HGMDLMesh() -{ - SAFE_DELETE(m_boundingBox); -} - void HGMDLMesh::LoadFromFile(MercuryFile* hgmdl) { uint32_t nameLength; @@ -98,117 +88,14 @@ data = new char[length]; hgmdl->Read( data, length ); - m_boundingBox = new OBB(); + m_boundingBox = new BoundingBox(); m_boundingBox->LoadFromBinary( data ); } SAFE_DELETE_ARRAY(data); } -void OBB::LoadFromBinary(char* data) -{ - memcpy(center, data, sizeof(float)*3); - memcpy(extend, data+(sizeof(float)*3), sizeof(float)*3); -} -#include <GL/gl.h> -#include <GL/glext.h> - -void OBB::Render(MercuryNode* node) -{ - glPushAttrib( GL_CURRENT_BIT ); - glBegin(GL_LINES); - glColor3f(0,1.0f,0); - - //front - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]); - - //back - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]); - - //top - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); - - //bottom - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]); - - glEnd(); -/* - glBegin(GL_QUADS); - //front - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); - - //back - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]); - - //left side - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]); - - //right side - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]); - - //top - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]-extend[2]); - glVertex3f(center[0]-extend[0], center[1]+extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]+extend[2]); - glVertex3f(center[0]+extend[0], center[1]+extend[1], center[2]-extend[2]); - - //bottom - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]-extend[2]); - glVertex3f(center[0]+extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]+extend[2]); - glVertex3f(center[0]-extend[0], center[1]-extend[1], center[2]-extend[2]); - - glEnd(); -*/ - glPointSize(4); - glBegin(GL_POINTS); - glVertex3f(center[0], center[1], center[2]); - glEnd(); - - glPopAttrib( ); -} - -void HGMDLMesh::Render(MercuryNode* node) -{ - MercuryVBO::Render(node); - - if (m_boundingBox) - m_boundingBox->Render(node); -} - /**************************************************************************** * Copyright (C) 2008 by Joshua Allen * * * Modified: Mercury2/src/HGMDLMesh.h =================================================================== --- Mercury2/src/HGMDLMesh.h 2009-03-01 20:22:29 UTC (rev 155) +++ Mercury2/src/HGMDLMesh.h 2009-03-01 21:10:09 UTC (rev 156) @@ -4,33 +4,16 @@ #include <MercuryVBO.h> #include <MercuryFile.h> -class OBB : public MercuryAsset -{ - public: - void LoadFromBinary(char* data); - - virtual void Render(MercuryNode* node); - - float center[3]; - float extend[3]; -}; - class HGMDLMesh : public MercuryVBO { public: - HGMDLMesh(); - ~HGMDLMesh(); void LoadFromFile(MercuryFile* hgmdl); void ReadExtraData(MercuryFile* hgmdl); void LoadOBB(MercuryFile* hgmdl); - - virtual void Render(MercuryNode* node); private: MString m_name; bool m_cachable; - - OBB* m_boundingBox; }; #endif Modified: Mercury2/src/MercuryVBO.cpp =================================================================== --- Mercury2/src/MercuryVBO.cpp 2009-03-01 20:22:29 UTC (rev 155) +++ Mercury2/src/MercuryVBO.cpp 2009-03-01 21:10:09 UTC (rev 156) @@ -10,7 +10,7 @@ #define BUFFER_OFFSET(i) ((char*)NULL + (i)) MercuryVBO::MercuryVBO() - :MercuryAsset(), m_initiated(false) + :MercuryAsset(), m_initiated(false), m_boundingBox(NULL) { m_bufferIDs[0] = m_bufferIDs[1] = 0; } @@ -19,6 +19,7 @@ { if (m_bufferIDs[0]) glDeleteBuffersARB(2, m_bufferIDs); m_bufferIDs[0] = m_bufferIDs[1] = 0; + SAFE_DELETE(m_boundingBox); } void MercuryVBO::Render(MercuryNode* node) @@ -51,6 +52,12 @@ glDrawRangeElements(GL_TRIANGLES, 0, m_indexData.Length()-1, m_indexData.Length(), GL_UNSIGNED_SHORT, NULL); m_lastVBOrendered = this; + + if (m_boundingBox) + { + RenderableBoundingBox rbb(m_boundingBox); + rbb.Render(node); + } } void MercuryVBO::InitVBO() Modified: Mercury2/src/MercuryVBO.h =================================================================== --- Mercury2/src/MercuryVBO.h 2009-03-01 20:22:29 UTC (rev 155) +++ Mercury2/src/MercuryVBO.h 2009-03-01 21:10:09 UTC (rev 156) @@ -3,6 +3,7 @@ #include <MercuryAsset.h> #include <AlignedBuffer.h> +#include <BoundingBox.h> class MercuryVBO : public MercuryAsset { @@ -25,6 +26,7 @@ protected: AlignedBuffer<float> m_vertexData; AlignedBuffer<uint16_t> m_indexData; + BoundingBox* m_boundingBox; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |