diff --git a/include/IntegralVector3.h b/include/IntegralVector3.h index 5e4d6d7f..6d8c34bc 100644 --- a/include/IntegralVector3.h +++ b/include/IntegralVector3.h @@ -58,7 +58,7 @@ namespace Ogre return false; //They are equal } - Vector3 toOgreVector3(void) + Vector3 toOgreVector3(void) const { return Vector3(Real(x), Real(y), Real(z)); } diff --git a/include/SurfaceEdge.h b/include/SurfaceEdge.h index 84f69c55..570c34aa 100644 --- a/include/SurfaceEdge.h +++ b/include/SurfaceEdge.h @@ -25,9 +25,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. namespace Ogre { class SurfaceVertex; - typedef std::list::iterator SurfaceVertexIterator; + typedef std::set::iterator SurfaceVertexIterator; class SurfaceTriangle; - typedef std::list::iterator SurfaceTriangleIterator; + typedef std::set::iterator SurfaceTriangleIterator; class SurfaceEdge; typedef std::list::iterator SurfaceEdgeIterator; @@ -55,7 +55,7 @@ namespace Ogre }; bool operator == (const SurfaceEdge& lhs, const SurfaceEdge& rhs); - //bool operator < (const SurfaceEdge& lhs, const SurfaceEdge& rhs); + bool operator < (const SurfaceEdge& lhs, const SurfaceEdge& rhs); } #endif diff --git a/include/SurfacePatch.h b/include/SurfacePatch.h index 1b979bc9..6aafbaa7 100644 --- a/include/SurfacePatch.h +++ b/include/SurfacePatch.h @@ -1,8 +1,8 @@ #ifndef __SurfacePatch_H__ #define __SurfacePatch_H__ +#include #include -#include #include "IntegralVector3.h" @@ -19,9 +19,9 @@ namespace Ogre }; class SurfaceVertex; - typedef std::list::iterator SurfaceVertexIterator; + typedef std::set::iterator SurfaceVertexIterator; class SurfaceTriangle; - typedef std::list::iterator SurfaceTriangleIterator; + typedef std::set::iterator SurfaceTriangleIterator; class SurfaceEdge; typedef std::list::iterator SurfaceEdgeIterator; @@ -55,8 +55,8 @@ namespace Ogre UIntVector3 m_v3dOffset; private: - std::list m_listVertices; - std::list m_listTriangles; + std::set m_listVertices; + std::set m_listTriangles; std::list m_listEdges; //std::vector m_vecVertexData; diff --git a/include/SurfaceTriangle.h b/include/SurfaceTriangle.h index efef88cc..916c2d88 100644 --- a/include/SurfaceTriangle.h +++ b/include/SurfaceTriangle.h @@ -25,9 +25,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. namespace Ogre { class SurfaceVertex; - typedef std::list::iterator SurfaceVertexIterator; + typedef std::set::iterator SurfaceVertexIterator; class SurfaceTriangle; - typedef std::list::iterator SurfaceTriangleIterator; + typedef std::set::iterator SurfaceTriangleIterator; class SurfaceEdge; typedef std::list::iterator SurfaceEdgeIterator; @@ -43,7 +43,7 @@ namespace Ogre }; bool operator == (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs); - //bool operator < (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs); + bool operator < (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs); //bool operator < (const SurfaceTriangleIterator& lhs, const SurfaceTriangleIterator& rhs); } diff --git a/include/SurfaceVertex.h b/include/SurfaceVertex.h index 8acde5de..d3a70078 100644 --- a/include/SurfaceVertex.h +++ b/include/SurfaceVertex.h @@ -28,36 +28,36 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. namespace Ogre { class SurfaceVertex; - typedef std::list::iterator SurfaceVertexIterator; + typedef std::set::iterator SurfaceVertexIterator; class SurfaceTriangle; - typedef std::list::iterator SurfaceTriangleIterator; + typedef std::set::iterator SurfaceTriangleIterator; class SurfaceEdge; typedef std::list::iterator SurfaceEdgeIterator; class SurfaceVertex { public: - UIntVector3 position; + Vector3 normal; - float alpha; - //uchar flags; - //uchar noOfUses; + float alpha; - //bool fixed; SurfaceEdgeIterator edge; SurfaceVertex(); - SurfaceVertex(UIntVector3 positionToSet); - SurfaceVertex(UIntVector3 positionToSet, Vector3 normalToSet); + const UIntVector3& getPosition(void) const; + std::string toString(void); + + private: + UIntVector3 position; }; bool operator==(const SurfaceVertex& lhs, const SurfaceVertex& rhs); - //bool operator < (const SurfaceVertex& lhs, const SurfaceVertex& rhs); + bool operator < (const SurfaceVertex& lhs, const SurfaceVertex& rhs); //bool operator < (const SurfaceVertexIterator& lhs, const SurfaceVertexIterator& rhs); diff --git a/source/PolyVoxSceneManager.cpp b/source/PolyVoxSceneManager.cpp index 5fe12b64..c4d29fd1 100644 --- a/source/PolyVoxSceneManager.cpp +++ b/source/PolyVoxSceneManager.cpp @@ -323,11 +323,11 @@ namespace Ogre //Regenerate meshes. for(uint regionZ = 0; regionZ < OGRE_VOLUME_SIDE_LENGTH_IN_REGIONS; ++regionZ) { - //LogManager::getSingleton().logMessage("regionZ = " + StringConverter::toString(regionZ)); - for(uint regionY = 0; regionY < OGRE_VOLUME_SIDE_LENGTH_IN_REGIONS/2+1; ++regionY) + LogManager::getSingleton().logMessage("regionZ = " + StringConverter::toString(regionZ)); + for(uint regionY = OGRE_VOLUME_SIDE_LENGTH_IN_REGIONS/2-2; regionY < OGRE_VOLUME_SIDE_LENGTH_IN_REGIONS/2+1; ++regionY) { //LogManager::getSingleton().logMessage("regionY = " + StringConverter::toString(regionY)); - for(uint regionX = 0; regionX < OGRE_VOLUME_SIDE_LENGTH_IN_REGIONS/2+1; ++regionX) + for(uint regionX = OGRE_VOLUME_SIDE_LENGTH_IN_REGIONS/2-2; regionX < OGRE_VOLUME_SIDE_LENGTH_IN_REGIONS/2+1; ++regionX) { //LogManager::getSingleton().logMessage("regionX = " + StringConverter::toString(regionX)); if(surfaceUpToDate[regionX][regionY][regionZ] == false) diff --git a/source/SurfaceEdge.cpp b/source/SurfaceEdge.cpp index ba6dc172..ac4aa91b 100644 --- a/source/SurfaceEdge.cpp +++ b/source/SurfaceEdge.cpp @@ -26,7 +26,7 @@ namespace Ogre return (target == otherHalfEdge->target); } - /*bool operator < (const SurfaceEdge& lhs, const SurfaceEdge& rhs) + bool operator < (const SurfaceEdge& lhs, const SurfaceEdge& rhs) { if(lhs.target == rhs.target) { @@ -37,5 +37,5 @@ namespace Ogre return (*(lhs.otherHalfEdge->target) < *(rhs.otherHalfEdge->target)); } return (*(lhs.target) < *(rhs.target)); - }*/ + } } diff --git a/source/SurfacePatch.cpp b/source/SurfacePatch.cpp index 01143b53..ff9aab2c 100644 --- a/source/SurfacePatch.cpp +++ b/source/SurfacePatch.cpp @@ -89,9 +89,11 @@ namespace Ogre triangle.edge = v0v1Iter; - m_listTriangles.push_back(triangle); - SurfaceTriangleIterator iterTriangle = m_listTriangles.end(); - iterTriangle--; + //m_listTriangles.push_back(triangle); + //SurfaceTriangleIterator iterTriangle = m_listTriangles.end(); + //iterTriangle--; + + SurfaceTriangleIterator iterTriangle = m_listTriangles.insert(triangle).first; v0v1Iter->triangle = iterTriangle; v1v2Iter->triangle = iterTriangle; @@ -100,7 +102,7 @@ namespace Ogre SurfaceVertexIterator SurfacePatch::findOrAddVertex(const SurfaceVertex& vertex) { - SurfaceVertexIterator vertexIter = find(m_listVertices.begin(), m_listVertices.end(), vertex); + /*SurfaceVertexIterator vertexIter = find(m_listVertices.begin(), m_listVertices.end(), vertex); if(vertexIter == m_listVertices.end()) { //LogManager::getSingleton().logMessage("Adding Vertex " + StringConverter::toString(v0.position.x) + "," + StringConverter::toString(v0.position.y) + "," + StringConverter::toString(v0.position.z)); @@ -108,7 +110,9 @@ namespace Ogre vertexIter = m_listVertices.end(); vertexIter--; } - return vertexIter; + return vertexIter;*/ + + return m_listVertices.insert(vertex).first; } SurfaceEdgeIterator SurfacePatch::findEdge(const SurfaceVertexIterator& source, const SurfaceVertexIterator& target) @@ -144,10 +148,12 @@ namespace Ogre m_listEdges.push_back(edge); SurfaceEdgeIterator edgeIter = m_listEdges.end(); edgeIter--; + //SurfaceEdgeIterator edgeIter = m_listEdges.insert(edge).first; m_listEdges.push_back(otherEdge); SurfaceEdgeIterator otherEdgeIter = m_listEdges.end(); otherEdgeIter--; + //SurfaceEdgeIterator otherEdgeIter = m_listEdges.insert(edge).first; edgeIter->otherHalfEdge = otherEdgeIter; edgeIter->nextHalfEdge = otherEdgeIter; @@ -169,9 +175,9 @@ namespace Ogre for(SurfaceVertexIterator vertexIter = m_listVertices.begin(); vertexIter != m_listVertices.end(); ++vertexIter) { //LogManager::getSingleton().logMessage("In Loop"); - const float posX = (vertexIter->position.x + m_v3dOffset.x) / 2.0f; - const float posY = (vertexIter->position.y + m_v3dOffset.y) / 2.0f; - const float posZ = (vertexIter->position.z + m_v3dOffset.z) / 2.0f; + const float posX = (vertexIter->getPosition().x + m_v3dOffset.x) / 2.0f; + const float posY = (vertexIter->getPosition().y + m_v3dOffset.y) / 2.0f; + const float posZ = (vertexIter->getPosition().z + m_v3dOffset.z) / 2.0f; const uint floorX = static_cast(posX); const uint floorY = static_cast(posY); @@ -259,12 +265,12 @@ namespace Ogre vertexData.resize(m_listVertices.size()); std::copy(m_listVertices.begin(), m_listVertices.end(), vertexData.begin()); - LogManager::getSingleton().logMessage("----------Vertex Data----------"); + /*LogManager::getSingleton().logMessage("----------Vertex Data----------"); for(std::vector::iterator vertexIter = vertexData.begin(); vertexIter != vertexData.end(); ++vertexIter) { - LogManager::getSingleton().logMessage(StringConverter::toString(vertexIter->position.x) + "," + StringConverter::toString(vertexIter->position.y) + "," + StringConverter::toString(vertexIter->position.z)); + LogManager::getSingleton().logMessage(StringConverter::toString(vertexIter->getPosition().x) + "," + StringConverter::toString(vertexIter->getPosition().y) + "," + StringConverter::toString(vertexIter->getPosition().z)); } - LogManager::getSingleton().logMessage("----------End Vertex Data----------"); + LogManager::getSingleton().logMessage("----------End Vertex Data----------");*/ for(SurfaceTriangleIterator iterTriangles = m_listTriangles.begin(); iterTriangles != m_listTriangles.end(); ++iterTriangles) { @@ -275,18 +281,18 @@ namespace Ogre edgeIter = iterTriangles->edge; //LogManager::getSingleton().logMessage("Edge Target " + StringConverter::toString(edgeIter->target->position.x) + "," + StringConverter::toString(edgeIter->target->position.y) + "," + StringConverter::toString(edgeIter->target->position.z)); iterVertex = find(vertexData.begin(), vertexData.end(), *(edgeIter->target)); - LogManager::getSingleton().logMessage(""); - LogManager::getSingleton().logMessage(" " + StringConverter::toString(iterVertex->position.x) + "," + StringConverter::toString(iterVertex->position.y) + "," + StringConverter::toString(iterVertex->position.z)); + //LogManager::getSingleton().logMessage(""); + //LogManager::getSingleton().logMessage(" " + StringConverter::toString(iterVertex->getPosition().x) + "," + StringConverter::toString(iterVertex->getPosition().y) + "," + StringConverter::toString(iterVertex->getPosition().z)); indexData.push_back(iterVertex - vertexData.begin()); edgeIter = edgeIter->nextHalfEdge; iterVertex = find(vertexData.begin(), vertexData.end(), *(edgeIter->target)); - LogManager::getSingleton().logMessage(" " + StringConverter::toString(iterVertex->position.x) + "," + StringConverter::toString(iterVertex->position.y) + "," + StringConverter::toString(iterVertex->position.z)); + //LogManager::getSingleton().logMessage(" " + StringConverter::toString(iterVertex->getPosition().x) + "," + StringConverter::toString(iterVertex->getPosition().y) + "," + StringConverter::toString(iterVertex->getPosition().z)); indexData.push_back(iterVertex - vertexData.begin()); edgeIter = edgeIter->nextHalfEdge; iterVertex = find(vertexData.begin(), vertexData.end(), *(edgeIter->target)); - LogManager::getSingleton().logMessage(" " + StringConverter::toString(iterVertex->position.x) + "," + StringConverter::toString(iterVertex->position.y) + "," + StringConverter::toString(iterVertex->position.z)); + //LogManager::getSingleton().logMessage(" " + StringConverter::toString(iterVertex->getPosition().x) + "," + StringConverter::toString(iterVertex->getPosition().y) + "," + StringConverter::toString(iterVertex->getPosition().z)); indexData.push_back(iterVertex - vertexData.begin()); //LogManager::getSingleton().logMessage("End Triangle"); @@ -303,15 +309,15 @@ namespace Ogre for(std::list::iterator connectedIter = listConnectedIter.begin(); connectedIter != listConnectedIter.end(); ++connectedIter) { - if((*connectedIter)->position.x != vertexIter->position.x) + if((*connectedIter)->getPosition().x != vertexIter->getPosition().x) { allXMatch = false; } - if((*connectedIter)->position.y != vertexIter->position.y) + if((*connectedIter)->getPosition().y != vertexIter->getPosition().y) { allYMatch = false; } - if((*connectedIter)->position.z != vertexIter->position.z) + if((*connectedIter)->getPosition().z != vertexIter->getPosition().z) { allZMatch = false; } @@ -327,9 +333,9 @@ namespace Ogre SurfaceVertexIterator firstExtreme = *(listConnectedIter.begin()); SurfaceVertexIterator secondExtreme = *(--listConnectedIter.end()); - bool edgeXMatch = (firstExtreme->position.x == vertexIter->position.x) && (secondExtreme->position.x == vertexIter->position.x); - bool edgeYMatch = (firstExtreme->position.y == vertexIter->position.y) && (secondExtreme->position.y == vertexIter->position.y); - bool edgeZMatch = (firstExtreme->position.z == vertexIter->position.z) && (secondExtreme->position.z == vertexIter->position.z); + bool edgeXMatch = (firstExtreme->getPosition().x == vertexIter->getPosition().x) && (secondExtreme->getPosition().x == vertexIter->getPosition().x); + bool edgeYMatch = (firstExtreme->getPosition().y == vertexIter->getPosition().y) && (secondExtreme->getPosition().y == vertexIter->getPosition().y); + bool edgeZMatch = (firstExtreme->getPosition().z == vertexIter->getPosition().z) && (secondExtreme->getPosition().z == vertexIter->getPosition().z); twoEdgesMatch = ((edgeXMatch&&edgeYMatch) || (edgeXMatch&&edgeZMatch) || (edgeYMatch&&edgeZMatch)); } @@ -403,13 +409,13 @@ namespace Ogre bool SurfacePatch::decimateOneVertex(void) { bool didDecimation = false; - LogManager::getSingleton().logMessage("\n\nPerforming decimation"); - LogManager::getSingleton().logMessage("No of triangles at start = " + StringConverter::toString(m_listTriangles.size())); + //LogManager::getSingleton().logMessage("\n\nPerforming decimation"); + //LogManager::getSingleton().logMessage("No of triangles at start = " + StringConverter::toString(m_listTriangles.size())); //int fixed = 0; //int movable = 0; for(SurfaceVertexIterator vertexIter = m_listVertices.begin(); vertexIter != m_listVertices.end(); ++vertexIter) { - LogManager::getSingleton().logMessage("Examining vertex " + vertexIter->toString()); + //LogManager::getSingleton().logMessage("Examining vertex " + vertexIter->toString()); bool isEdge; std::list listConnectedVertices = findConnectedVertices(vertexIter,isEdge); @@ -432,7 +438,7 @@ namespace Ogre continue; } - LogManager::getSingleton().logMessage("Vertex can be removed"); + //LogManager::getSingleton().logMessage("Vertex can be removed"); for(std::list::iterator iter = listConnectedVertices.begin(); iter != listConnectedVertices.end(); ++iter) { @@ -448,11 +454,11 @@ namespace Ogre m_listEdges.erase(otherEdgeToDelete); } - LogManager::getSingleton().logMessage("Removing vertex " + vertexIter->toString()); + //LogManager::getSingleton().logMessage("Removing vertex " + vertexIter->toString()); m_listVertices.erase(vertexIter); //Now triangulate... - LogManager::getSingleton().logMessage("Doing triangulation"); + //LogManager::getSingleton().logMessage("Doing triangulation"); triangulate(listConnectedVertices); didDecimation = true; @@ -460,8 +466,8 @@ namespace Ogre } //LogManager::getSingleton().logMessage("Fixed = " + StringConverter::toString(fixed) + " Movable = " + StringConverter::toString(movable)); - LogManager::getSingleton().logMessage("Done decimation"); - LogManager::getSingleton().logMessage("No of triangles at end = " + StringConverter::toString(m_listTriangles.size())); + //LogManager::getSingleton().logMessage("Done decimation"); + //LogManager::getSingleton().logMessage("No of triangles at end = " + StringConverter::toString(m_listTriangles.size())); /*std::vector vertexDataTemp; std::vector indexDataTemp; @@ -506,8 +512,8 @@ namespace Ogre SurfaceVertexIterator v1Iter = *v1IterIter; SurfaceVertexIterator v2Iter = *v2IterIter; - Vector3 v1tov0(v0Iter->position.toOgreVector3() -v1Iter->position.toOgreVector3()); - Vector3 v1tov2(v2Iter->position.toOgreVector3() -v1Iter->position.toOgreVector3()); + Vector3 v1tov0(v0Iter->getPosition().toOgreVector3() - v1Iter->getPosition().toOgreVector3()); + Vector3 v1tov2(v2Iter->getPosition().toOgreVector3() - v1Iter->getPosition().toOgreVector3()); Vector3 cross = (v1tov2).crossProduct(v1tov0); cross.normalise(); diff --git a/source/SurfacePatchRenderable.cpp b/source/SurfacePatchRenderable.cpp index 858d3e38..7ab66f83 100644 --- a/source/SurfacePatchRenderable.cpp +++ b/source/SurfacePatchRenderable.cpp @@ -66,12 +66,12 @@ namespace Ogre int size = verticesToSet.size(); Vector3 vaabMin; Vector3 vaabMax; - vaabMin.x = verticesToSet[0].position.x/2.0f; - vaabMin.y = verticesToSet[0].position.y/2.0f; - vaabMin.z = verticesToSet[0].position.z/2.0f; - vaabMax.x = verticesToSet[0].position.x/2.0f; - vaabMax.y = verticesToSet[0].position.y/2.0f; - vaabMax.z = verticesToSet[0].position.z/2.0f; + vaabMin.x = verticesToSet[0].getPosition().x/2.0f; + vaabMin.y = verticesToSet[0].getPosition().y/2.0f; + vaabMin.z = verticesToSet[0].getPosition().z/2.0f; + vaabMax.x = verticesToSet[0].getPosition().x/2.0f; + vaabMax.y = verticesToSet[0].getPosition().y/2.0f; + vaabMax.z = verticesToSet[0].getPosition().z/2.0f; //LogManager::getSingleton().logMessage("Setting Vertex Data of size " + StringConverter::toString(size)); @@ -79,9 +79,9 @@ namespace Ogre for(int i = 0; i < size; i++) { - *prPos++ = verticesToSet[i].position.x/2.0f; - *prPos++ = verticesToSet[i].position.y/2.0f; - *prPos++ = verticesToSet[i].position.z/2.0f; + *prPos++ = verticesToSet[i].getPosition().x/2.0f; + *prPos++ = verticesToSet[i].getPosition().y/2.0f; + *prPos++ = verticesToSet[i].getPosition().z/2.0f; *prPos++ = verticesToSet[i].normal.x; *prPos++ = verticesToSet[i].normal.y; @@ -89,19 +89,19 @@ namespace Ogre *prPos++ = verticesToSet[i].alpha; - if(verticesToSet[i].position.x < vaabMin.x) - vaabMin.x = verticesToSet[i].position.x; - if(verticesToSet[i].position.y < vaabMin.y) - vaabMin.y = verticesToSet[i].position.y; - if(verticesToSet[i].position.z < vaabMin.z) - vaabMin.z = verticesToSet[i].position.z; + if(verticesToSet[i].getPosition().x < vaabMin.x) + vaabMin.x = verticesToSet[i].getPosition().x; + if(verticesToSet[i].getPosition().y < vaabMin.y) + vaabMin.y = verticesToSet[i].getPosition().y; + if(verticesToSet[i].getPosition().z < vaabMin.z) + vaabMin.z = verticesToSet[i].getPosition().z; - if(verticesToSet[i].position.x > vaabMax.x) - vaabMax.x = verticesToSet[i].position.x; - if(verticesToSet[i].position.y > vaabMax.y) - vaabMax.y = verticesToSet[i].position.y; - if(verticesToSet[i].position.z > vaabMax.z) - vaabMax.z = verticesToSet[i].position.z; + if(verticesToSet[i].getPosition().x > vaabMax.x) + vaabMax.x = verticesToSet[i].getPosition().x; + if(verticesToSet[i].getPosition().y > vaabMax.y) + vaabMax.y = verticesToSet[i].getPosition().y; + if(verticesToSet[i].getPosition().z > vaabMax.z) + vaabMax.z = verticesToSet[i].getPosition().z; } vbuf->unlock(); diff --git a/source/SurfaceTriangle.cpp b/source/SurfaceTriangle.cpp index 3e2a7bc8..904a7d0c 100644 --- a/source/SurfaceTriangle.cpp +++ b/source/SurfaceTriangle.cpp @@ -38,10 +38,10 @@ namespace Ogre return lhs.edge == rhs.edge; } - /*bool operator < (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs) + bool operator < (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs) { return (*lhs.edge < *rhs.edge); - }*/ + } /*bool operator < (const SurfaceTriangleIterator& lhs, const SurfaceTriangleIterator& rhs) { diff --git a/source/SurfaceVertex.cpp b/source/SurfaceVertex.cpp index e722d2db..7abbf5a0 100644 --- a/source/SurfaceVertex.cpp +++ b/source/SurfaceVertex.cpp @@ -50,6 +50,11 @@ namespace Ogre flags |= 32;*/ } + const UIntVector3& SurfaceVertex::getPosition(void) const + { + return position; + } + std::string SurfaceVertex::toString(void) { std::stringstream ss; @@ -84,17 +89,17 @@ namespace Ogre return value == rhsValue;*/ - unsigned long lhsOffset = (lhs.position.x*(OGRE_REGION_SIDE_LENGTH*2+1)*(OGRE_REGION_SIDE_LENGTH*2+1)) + (lhs.position.y*(OGRE_REGION_SIDE_LENGTH*2+1)) + (lhs.position.z); - unsigned long rhsOffset = (rhs.position.x*(OGRE_REGION_SIDE_LENGTH*2+1)*(OGRE_REGION_SIDE_LENGTH*2+1)) + (rhs.position.y*(OGRE_REGION_SIDE_LENGTH*2+1)) + (rhs.position.z); + unsigned long lhsOffset = (lhs.getPosition().x*(OGRE_REGION_SIDE_LENGTH*2+1)*(OGRE_REGION_SIDE_LENGTH*2+1)) + (lhs.getPosition().y*(OGRE_REGION_SIDE_LENGTH*2+1)) + (lhs.getPosition().z); + unsigned long rhsOffset = (rhs.getPosition().x*(OGRE_REGION_SIDE_LENGTH*2+1)*(OGRE_REGION_SIDE_LENGTH*2+1)) + (rhs.getPosition().y*(OGRE_REGION_SIDE_LENGTH*2+1)) + (rhs.getPosition().z); return (lhsOffset == rhsOffset) /*&& (abs(lhs.alpha - rhs.alpha) <= 0.01)*/; } - /*bool operator < (const SurfaceVertex& lhs, const SurfaceVertex& rhs) + bool operator < (const SurfaceVertex& lhs, const SurfaceVertex& rhs) { - unsigned long lhsOffset = (lhs.position.x*(OGRE_REGION_SIDE_LENGTH*2+1)*(OGRE_REGION_SIDE_LENGTH*2+1)) + (lhs.position.y*(OGRE_REGION_SIDE_LENGTH*2+1)) + (lhs.position.z); - unsigned long rhsOffset = (rhs.position.x*(OGRE_REGION_SIDE_LENGTH*2+1)*(OGRE_REGION_SIDE_LENGTH*2+1)) + (rhs.position.y*(OGRE_REGION_SIDE_LENGTH*2+1)) + (rhs.position.z); + unsigned long lhsOffset = (lhs.getPosition().x*(OGRE_REGION_SIDE_LENGTH*2+1)*(OGRE_REGION_SIDE_LENGTH*2+1)) + (lhs.getPosition().y*(OGRE_REGION_SIDE_LENGTH*2+1)) + (lhs.getPosition().z); + unsigned long rhsOffset = (rhs.getPosition().x*(OGRE_REGION_SIDE_LENGTH*2+1)*(OGRE_REGION_SIDE_LENGTH*2+1)) + (rhs.getPosition().y*(OGRE_REGION_SIDE_LENGTH*2+1)) + (rhs.getPosition().z); return lhsOffset < rhsOffset; - }*/ + } } diff --git a/source/VolumeSerializer.cpp b/source/VolumeSerializer.cpp index a65c2db2..7a052707 100644 --- a/source/VolumeSerializer.cpp +++ b/source/VolumeSerializer.cpp @@ -59,7 +59,7 @@ namespace Ogre LogManager::getSingleton().logMessage("Value is " + StringConverter::toString(int(value))); }*/ volIter.setVoxelAt(x,y,z,value); - if(z < 24) + /*if(z < 24) { //if(x % 32 < 16) volIter.setVoxelAt(x,y,z,4); @@ -67,10 +67,10 @@ namespace Ogre //volIter.setVoxelAt(x,y,z,5); } else - volIter.setVoxelAt(x,y,z,0); + volIter.setVoxelAt(x,y,z,0);*/ } } - volIter.setVoxelAt(130,130,23,0); + //volIter.setVoxelAt(130,130,23,0); //Periodically see if we can tidy the memory to avoid excessive usage during loading. if(z%OGRE_BLOCK_SIDE_LENGTH == OGRE_BLOCK_SIDE_LENGTH-1)