Work on mesh decimation.
This commit is contained in:
parent
b84f589bcd
commit
bcb530942a
@ -48,6 +48,7 @@ namespace Ogre
|
|||||||
bool canRemoveVertexFrom(SurfaceVertexIterator vertexIter, std::list<SurfaceVertexIterator> listConnectedIter, bool isEdge);
|
bool canRemoveVertexFrom(SurfaceVertexIterator vertexIter, std::list<SurfaceVertexIterator> listConnectedIter, bool isEdge);
|
||||||
std::list<SurfaceVertexIterator> findConnectedVertices(SurfaceVertexIterator vertexIter, bool& isEdge);
|
std::list<SurfaceVertexIterator> findConnectedVertices(SurfaceVertexIterator vertexIter, bool& isEdge);
|
||||||
bool decimateOneVertex(void);
|
bool decimateOneVertex(void);
|
||||||
|
void triangulate(std::list<SurfaceVertexIterator> listVertices);
|
||||||
|
|
||||||
|
|
||||||
UIntVector3 m_v3dOffset;
|
UIntVector3 m_v3dOffset;
|
||||||
|
@ -448,39 +448,12 @@ namespace Ogre
|
|||||||
|
|
||||||
//Now triangulate...
|
//Now triangulate...
|
||||||
LogManager::getSingleton().logMessage("Doing triangulation");
|
LogManager::getSingleton().logMessage("Doing triangulation");
|
||||||
|
triangulate(listConnectedVertices);
|
||||||
std::list<SurfaceVertexIterator>::iterator v0IterIter = listConnectedVertices.begin();
|
|
||||||
std::list<SurfaceVertexIterator>::iterator v1IterIter = listConnectedVertices.begin();
|
|
||||||
std::list<SurfaceVertexIterator>::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;
|
|
||||||
}
|
|
||||||
|
|
||||||
didDecimation = true;
|
didDecimation = true;
|
||||||
break;
|
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("Fixed = " + StringConverter::toString(fixed) + " Movable = " + StringConverter::toString(movable));
|
||||||
LogManager::getSingleton().logMessage("Done decimation");
|
LogManager::getSingleton().logMessage("Done decimation");
|
||||||
LogManager::getSingleton().logMessage("No of triangles at end = " + StringConverter::toString(m_listTriangles.size()));
|
LogManager::getSingleton().logMessage("No of triangles at end = " + StringConverter::toString(m_listTriangles.size()));
|
||||||
@ -491,4 +464,25 @@ namespace Ogre
|
|||||||
|
|
||||||
return didDecimation;
|
return didDecimation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SurfacePatch::triangulate(std::list<SurfaceVertexIterator> listVertices)
|
||||||
|
{
|
||||||
|
std::list<SurfaceVertexIterator>::iterator v0IterIter = listVertices.begin();
|
||||||
|
std::list<SurfaceVertexIterator>::iterator v1IterIter = listVertices.begin();
|
||||||
|
std::list<SurfaceVertexIterator>::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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user