|
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.
|