From b84f589bcd38ea328697484ae83b0f73b5a77f47 Mon Sep 17 00:00:00 2001 From: David Williams Date: Fri, 21 Sep 2007 22:48:04 +0000 Subject: [PATCH] Work on mesh decimation. --- include/SurfacePatch.h | 1 - source/SurfacePatch.cpp | 79 ----------------------------------------- 2 files changed, 80 deletions(-) diff --git a/include/SurfacePatch.h b/include/SurfacePatch.h index 723981bd..d57efa5f 100644 --- a/include/SurfacePatch.h +++ b/include/SurfacePatch.h @@ -47,7 +47,6 @@ namespace Ogre bool canRemoveVertexFrom(SurfaceVertexIterator vertexIter, std::list listConnectedIter, bool isEdge); std::list findConnectedVertices(SurfaceVertexIterator vertexIter, bool& isEdge); - std::list removeTrianglesAndFindEdges(SurfaceVertexIterator vertexIter); bool decimateOneVertex(void); diff --git a/source/SurfacePatch.cpp b/source/SurfacePatch.cpp index 529e2f37..51b79bd6 100644 --- a/source/SurfacePatch.cpp +++ b/source/SurfacePatch.cpp @@ -401,75 +401,6 @@ namespace Ogre return result; } - std::list SurfacePatch::removeTrianglesAndFindEdges(SurfaceVertexIterator vertexIter) - { - std::list result; - //LogManager::getSingleton().logMessage("removeTrianglesAndFindEdges " + vertexIter->toString()); - - SurfaceEdgeIterator firstEdge = vertexIter->edge; - SurfaceEdgeIterator nextEdge = firstEdge; - SurfaceEdgeIterator previousEdge = firstEdge; - int ct = 0; - do - { - ct++; - //LogManager::getSingleton().logMessage("ct = " + StringConverter::toString(ct)); - if(ct > 100) - { - LogManager::getSingleton().logMessage("ct too big!!! Aborting decimation"); - exit(1); - } - - if(nextEdge->nextHalfEdge != nextEdge->otherHalfEdge) - { - m_listTriangles.erase(nextEdge->triangle); - } - - result.push_back(nextEdge); - result.push_back(nextEdge->otherHalfEdge); - previousEdge = nextEdge; - nextEdge = nextEdge->previousHalfEdge->otherHalfEdge; - - }while((nextEdge != firstEdge) && (nextEdge != previousEdge)); - - if(nextEdge == previousEdge) - { - //LogManager::getSingleton().logMessage("Is edge"); - //In this case vertexIter is on an edge - //return false; - - nextEdge = firstEdge; - previousEdge = firstEdge; - - previousEdge = nextEdge; - nextEdge = nextEdge->otherHalfEdge->nextHalfEdge; - - int ct2 = 0; - do - { - ct2++; - //LogManager::getSingleton().logMessage("ct2 = " + StringConverter::toString(ct2)); - if(ct2 > 100) - { - LogManager::getSingleton().logMessage("ct2 too big!!! Aborting decimation"); - exit(1); - } - - m_listTriangles.erase(nextEdge->triangle); - - result.push_back(nextEdge); - result.push_back(nextEdge->otherHalfEdge); - previousEdge = nextEdge; - nextEdge = nextEdge->otherHalfEdge->nextHalfEdge; - - }while(nextEdge != previousEdge); - } - - //LogManager::getSingleton().logMessage("Done find"); - - return result; - } - bool SurfacePatch::decimateOneVertex(void) { bool didDecimation = false; @@ -497,16 +428,6 @@ namespace Ogre continue; } LogManager::getSingleton().logMessage("Vertex can be removed"); - - /*SurfaceEdgeIterator firstEdge = vertexIter->edge; - SurfaceEdgeIterator nextEdge = firstEdge; - nextEdge = firstEdge; - std::list edgesToRemove = removeTrianglesAndFindEdges(vertexIter); - - for(std::list::iterator edgesToRemoveIter = edgesToRemove.begin(); edgesToRemoveIter != edgesToRemove.end(); ++edgesToRemoveIter) - { - m_listEdges.erase(*edgesToRemoveIter); - }*/ for(std::list::iterator iter = listConnectedVertices.begin(); iter != listConnectedVertices.end(); ++iter) {