diff --git a/include/SurfacePatch.h b/include/SurfacePatch.h index d57efa5f..61b40854 100644 --- a/include/SurfacePatch.h +++ b/include/SurfacePatch.h @@ -48,6 +48,7 @@ namespace Ogre bool canRemoveVertexFrom(SurfaceVertexIterator vertexIter, std::list listConnectedIter, bool isEdge); std::list findConnectedVertices(SurfaceVertexIterator vertexIter, bool& isEdge); bool decimateOneVertex(void); + void triangulate(std::list listVertices); UIntVector3 m_v3dOffset; diff --git a/source/SurfacePatch.cpp b/source/SurfacePatch.cpp index 51b79bd6..3566e077 100644 --- a/source/SurfacePatch.cpp +++ b/source/SurfacePatch.cpp @@ -448,39 +448,12 @@ namespace Ogre //Now triangulate... LogManager::getSingleton().logMessage("Doing triangulation"); - - std::list::iterator v0IterIter = listConnectedVertices.begin(); - std::list::iterator v1IterIter = listConnectedVertices.begin(); - std::list::iterator v2IterIter = listConnectedVertices.begin(); - ++v1IterIter; - ++v2IterIter; - ++v2IterIter; - while(v2IterIter != listConnectedVertices.end()) - { - LogManager::getSingleton().logMessage("Dereferenceing"); - SurfaceVertexIterator v0Iter = *v0IterIter; - SurfaceVertexIterator v1Iter = *v1IterIter; - SurfaceVertexIterator v2Iter = *v2IterIter; - - LogManager::getSingleton().logMessage("Adding Triangle"); - addTriangle(*v0Iter, *v1Iter, *v2Iter); - - ++v1IterIter; - ++v2IterIter; - } + triangulate(listConnectedVertices); didDecimation = true; break; } - for(SurfaceEdgeIterator edgeIter = m_listEdges.begin(); edgeIter != m_listEdges.end(); ++edgeIter) - { - if(edgeIter->isDegenerate()) - { - LogManager::getSingleton().logMessage("Error - found degenerate edge"); - } - } - //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())); @@ -491,4 +464,25 @@ namespace Ogre return didDecimation; } + + void SurfacePatch::triangulate(std::list listVertices) + { + std::list::iterator v0IterIter = listVertices.begin(); + std::list::iterator v1IterIter = listVertices.begin(); + std::list::iterator v2IterIter = listVertices.begin(); + ++v1IterIter; + ++v2IterIter; + ++v2IterIter; + while(v2IterIter != listVertices.end()) + { + SurfaceVertexIterator v0Iter = *v0IterIter; + SurfaceVertexIterator v1Iter = *v1IterIter; + SurfaceVertexIterator v2Iter = *v2IterIter; + + addTriangle(*v0Iter, *v1Iter, *v2Iter); + + ++v1IterIter; + ++v2IterIter; + } + } }