Work on mesh decimation.

This commit is contained in:
David Williams 2007-09-19 07:38:04 +00:00
parent 32204b483f
commit 152a79eaa9
7 changed files with 35 additions and 94 deletions

View File

@ -54,7 +54,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

View File

@ -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);
}

View File

@ -43,7 +43,7 @@ namespace Ogre
//uchar flags;
//uchar noOfUses;
bool fixed;
//bool fixed;
SurfaceEdgeIterator edge;
@ -57,7 +57,7 @@ namespace Ogre
};
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);

View File

@ -22,11 +22,11 @@ namespace Ogre
(
(lhs.target == rhs.target) &&
//(lhs.triangle == rhs.triangle)
(lhs.otherHalfEdge->target == rhs.otherHalfEdge->target)
(lhs.otherHalfEdge == rhs.otherHalfEdge)
);
}
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));
}
}*/
}

View File

@ -47,17 +47,17 @@ namespace Ogre
void SurfacePatch::addTriangle(const SurfaceVertex& v0,const SurfaceVertex& v1,const SurfaceVertex& v2)
{
if(v0.position.x > 8)
if(v0.position.x > 16)
return;
if(v0.position.y > 8)
if(v0.position.y > 16)
return;
if(v1.position.x > 8)
if(v1.position.x > 16)
return;
if(v1.position.y > 8)
if(v1.position.y > 16)
return;
if(v2.position.x > 8)
if(v2.position.x > 16)
return;
if(v2.position.y > 8)
if(v2.position.y > 16)
return;
@ -377,14 +377,21 @@ namespace Ogre
SurfaceVertexIterator firstVertex = firstEdge->target;
SurfaceEdgeIterator nextEdge = firstEdge;
int ct = 0;
do
{
ct++;
LogManager::getSingleton().logMessage("ct = " + StringConverter::toString(ct));
if(ct > 100)
{
exit(1);
}
if(nextEdge->hasTriangle == false)
{
break;
}
listConnectedVertices.push_back(nextEdge->target);
nextEdge = nextEdge->nextHalfEdge->nextHalfEdge->otherHalfEdge;
nextEdge = nextEdge->previousHalfEdge->otherHalfEdge;
}while((nextEdge != firstEdge) && (nextEdge != m_listEdges.end()));
if(nextEdge->hasTriangle == false)

View File

@ -34,38 +34,17 @@ namespace Ogre
}*/
bool operator == (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs)
{
/*return
(
(lhs.v0 == rhs.v0) &&
(lhs.v1 == rhs.v1) &&
(lhs.v2 == rhs.v2)
);*/
{
return lhs.edge == rhs.edge;
}
return lhs.edge == rhs.edge;
}
/*bool operator < (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs)
{
return (*lhs.edge < *rhs.edge);
}*/
bool operator < (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs)
{
/*if(lhs.v0 == rhs.v0)
{
if(lhs.v1 == rhs.v1)
{
if(lhs.v2 == rhs.v2)
{
return false;
}
return (*(lhs.v2) < *(rhs.v2));
}
return (*(lhs.v1) < *(rhs.v1));
}
return (*(lhs.v0) < *(rhs.v0));*/
return (*lhs.edge < *rhs.edge);
}
/*bool operator < (const SurfaceTriangleIterator& lhs, const SurfaceTriangleIterator& rhs)
{
return (*lhs) < (*rhs);
}*/
/*bool operator < (const SurfaceTriangleIterator& lhs, const SurfaceTriangleIterator& rhs)
{
return (*lhs) < (*rhs);
}*/
}

View File

@ -90,56 +90,11 @@ namespace Ogre
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)
{
/*if((*this) == rhs)
{
return false;
}
if(alpha < rhs.alpha)
{
return true;
}*/
/*if(position.z < rhs.position.z)
{
return true;
}
if(position.y < rhs.position.y)
{
return true;
}
if(position.x < rhs.position.x)
{
return true;
}
return false;*/
/*ulong value = 0;
value |= position.x;
value << 10;
value |= position.y;
value << 10;
value |= position.z;
ulong rhsValue = 0;
rhsValue |= rhs.position.x;
rhsValue << 10;
rhsValue |= rhs.position.y;
rhsValue << 10;
rhsValue |= rhs.position.z;
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);
return lhsOffset < rhsOffset;
/*if(lhsOffset == rhsOffset)
{
return (lhs.alpha < rhs.alpha);
}
return (lhsOffset < rhsOffset)*/;
}
}*/
}