Work on mesh decimation.
This commit is contained in:
parent
9163cfda52
commit
a5732d3221
@ -160,12 +160,12 @@ namespace Ogre
|
|||||||
otherEdgeIter--;
|
otherEdgeIter--;
|
||||||
|
|
||||||
edgeIter->otherHalfEdge = otherEdgeIter;
|
edgeIter->otherHalfEdge = otherEdgeIter;
|
||||||
edgeIter->nextHalfEdge = edgeIter;
|
edgeIter->nextHalfEdge = otherEdgeIter;
|
||||||
edgeIter->previousHalfEdge = edgeIter;
|
edgeIter->previousHalfEdge = otherEdgeIter;
|
||||||
|
|
||||||
otherEdgeIter->otherHalfEdge = edgeIter;
|
otherEdgeIter->otherHalfEdge = edgeIter;
|
||||||
otherEdgeIter->nextHalfEdge = otherEdgeIter;
|
otherEdgeIter->nextHalfEdge = edgeIter;
|
||||||
otherEdgeIter->previousHalfEdge = otherEdgeIter;
|
otherEdgeIter->previousHalfEdge = edgeIter;
|
||||||
|
|
||||||
edgeIter->hasTriangle = false;
|
edgeIter->hasTriangle = false;
|
||||||
otherEdgeIter->hasTriangle = false;
|
otherEdgeIter->hasTriangle = false;
|
||||||
@ -374,6 +374,7 @@ namespace Ogre
|
|||||||
SurfaceVertexIterator firstVertex = firstEdge->target;
|
SurfaceVertexIterator firstVertex = firstEdge->target;
|
||||||
|
|
||||||
SurfaceEdgeIterator nextEdge = firstEdge;
|
SurfaceEdgeIterator nextEdge = firstEdge;
|
||||||
|
SurfaceEdgeIterator previousEdge = firstEdge;
|
||||||
int ct = 0;
|
int ct = 0;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -381,17 +382,17 @@ namespace Ogre
|
|||||||
LogManager::getSingleton().logMessage("ct = " + StringConverter::toString(ct));
|
LogManager::getSingleton().logMessage("ct = " + StringConverter::toString(ct));
|
||||||
if(ct > 100)
|
if(ct > 100)
|
||||||
{
|
{
|
||||||
|
LogManager::getSingleton().logMessage("ct too big!!! Aborting decimation");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
if(nextEdge->hasTriangle == false)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
listConnectedVertices.push_back(nextEdge->target);
|
|
||||||
nextEdge = nextEdge->previousHalfEdge->otherHalfEdge;
|
|
||||||
}while((nextEdge != firstEdge) && (nextEdge != m_listEdges.end()));
|
|
||||||
|
|
||||||
if(nextEdge->hasTriangle == false)
|
listConnectedVertices.push_back(nextEdge->target);
|
||||||
|
|
||||||
|
previousEdge = nextEdge;
|
||||||
|
nextEdge = nextEdge->previousHalfEdge->otherHalfEdge;
|
||||||
|
}while((nextEdge != firstEdge) && (nextEdge != previousEdge));
|
||||||
|
|
||||||
|
if(nextEdge == previousEdge)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -419,13 +420,7 @@ namespace Ogre
|
|||||||
if((allXMatch) || (allYMatch) || (allZMatch))
|
if((allXMatch) || (allYMatch) || (allZMatch))
|
||||||
{
|
{
|
||||||
LogManager::getSingleton().logMessage(" All flat");
|
LogManager::getSingleton().logMessage(" All flat");
|
||||||
/*for(SurfaceVertexIterator innerVertexIter = m_listVertices.begin(); innerVertexIter != m_listVertices.end(); ++innerVertexIter)
|
|
||||||
{
|
|
||||||
if(innerVertexIter->position == vertexIter->position)
|
|
||||||
{
|
|
||||||
innerVertexIter->position = (*listConnectedVertices.begin())->position;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
nextEdge = firstEdge;
|
nextEdge = firstEdge;
|
||||||
//std::list<SurfaceVertexIterator> verticesFormingPolygon;
|
//std::list<SurfaceVertexIterator> verticesFormingPolygon;
|
||||||
do
|
do
|
||||||
@ -433,7 +428,7 @@ namespace Ogre
|
|||||||
//verticesFormingPolygon.push_back(nextEdge->target);
|
//verticesFormingPolygon.push_back(nextEdge->target);
|
||||||
LogManager::getSingleton().logMessage("Removing triangle");
|
LogManager::getSingleton().logMessage("Removing triangle");
|
||||||
m_listTriangles.erase(nextEdge->triangle);
|
m_listTriangles.erase(nextEdge->triangle);
|
||||||
nextEdge = nextEdge->nextHalfEdge->nextHalfEdge->otherHalfEdge;
|
nextEdge = nextEdge->previousHalfEdge->otherHalfEdge;
|
||||||
}while(nextEdge != firstEdge);
|
}while(nextEdge != firstEdge);
|
||||||
|
|
||||||
//nextEdge = firstEdge;
|
//nextEdge = firstEdge;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user