29#ifndef __ProgressiveMeshGenerator_H_
30#define __ProgressiveMeshGenerator_H_
90 template<
typename T,
unsigned S>
111 struct PMCollapseCostLess;
148 bool operator== (
const PMEdge& other)
const;
151 bool operator< (
const PMEdge& other)
const;
169 unsigned int vertexID[3];
219 template<
typename IndexType>
222 unsigned short submeshID)
226 for (; iPos < iEnd; iPos += 3) {
228 OgreAssert(mTriangleList.capacity() > mTriangleList.size(),
"");
233 for (
int i = 0; i < 3; i++) {
237 tri->
vertex[i] = lookup[iPos[i]];
242 str <<
"In " << mMeshName <<
" malformed triangle found with ID: " << getTriangleID(tri) <<
". " <<
244 printTriangle(tri, str);
245 str <<
"It will be excluded from LOD level calculations.";
246 LogManager::getSingleton().stream() << str.str();
249 mIndexBufferInfoList[tri->
submeshID].indexCount -= 3;
253 addTriangleToEdges(tri);
268 bool hasSrcID(
unsigned int srcID,
unsigned short submeshID);
269 size_t findDstID(
unsigned int srcID,
unsigned short submeshID);
Summary class collecting together index data source information.
virtual ~ProgressiveMeshGeneratorBase()
virtual void getAutoconfig(MeshPtr &inMesh, LodConfig &outLodConfig)
Fills LOD Config with a config, which works on any mesh.
virtual void generateAutoconfiguredLodLevels(MeshPtr &mesh)
Generates the LOD levels for a mesh without configuring it.
virtual void generateLodLevels(LodConfig &lodConfig)=0
Generates the LOD levels for a mesh.
Improved version of ProgressiveMesh.
size_t findDstID(unsigned int srcID, unsigned short submeshID)
void updateVertexCollapseCost(PMVertex *src)
VertexLookupList mVertexLookup
void replaceVertexID(PMTriangle *triangle, unsigned int oldID, unsigned int newID, PMVertex *dst)
int getTriangleID(PMTriangle *triangle)
VertexLookupList mSharedVertexLookup
ProgressiveMeshGenerator()
void assertValidVertex(PMVertex *v)
vector< PMIndexBufferInfo >::type IndexBufferInfoList
void removeTriangleFromEdges(PMTriangle *triangle, PMVertex *skip=NULL)
void assertOutdatedCollapseCost(PMVertex *vertex)
virtual ~ProgressiveMeshGenerator()
PMTriangle * isDuplicateTriangle(PMTriangle *triangle)
bool isDuplicateTriangle(PMTriangle *triangle, PMTriangle *triangle2)
void removeEdge(PMVertex *v, const PMEdge &edge)
bool isBorderVertex(const PMVertex *vertex) const
void addVertexData(VertexData *vertexData, bool useSharedVertexLookup)
void addTriangleToEdges(PMTriangle *triangle)
bool hasSrcID(unsigned int srcID, unsigned short submeshID)
vector< PMVertex >::type VertexList
HashSet< PMVertex *, PMVertexHash, PMVertexEqual > UniqueVertexSet
UniqueVertexSet mUniqueVertexSet
void addIndexDataImpl(IndexType *iPos, const IndexType *iEnd, VertexLookupList &lookup, unsigned short submeshID)
String mMeshName
The name of the mesh being processed.
void addIndexData(IndexData *indexData, bool useSharedVertexLookup, unsigned short submeshID)
void addEdge(PMVertex *v, const PMEdge &edge)
vector< PMCollapsedEdge >::type CollapsedEdges
Real computeEdgeCollapseCost(PMVertex *src, PMEdge *dstEdge)
CollapseCostHeap mCollapseCostHeap
size_t calcLodVertexCount(const LodLevel &lodConfig)
IndexBufferInfoList mIndexBufferInfoList
multimap< Real, PMVertex * >::type CollapseCostHeap
VectorSet< PMTriangle *, 7 > VTriangles
void collapse(PMVertex *vertex)
vector< PMTriangle >::type TriangleList
CollapsedEdges tmpCollapsedEdges
PMTriangle * findSideTriangle(const PMVertex *v1, const PMVertex *v2)
void printTriangle(PMTriangle *triangle, stringstream &str)
void computeVertexCollapseCost(PMVertex *vertex)
TriangleList mTriangleList
void generateLodLevels(LodConfig &lodConfig)
Generates the LOD levels for a mesh.
Real mMeshBoundingSphereRadius
VectorSet< PMEdge, 8 > VEdges
vector< PMVertex * >::type VertexLookupList
void computeLods(LodConfig &lodConfigs)
PMEdge * getPointer(VEdges::iterator it)
SmallVector - This is a 'vector' (really, a variable-sized array), optimized for the case when the ar...
Standard 3-dimensional vector.
Summary class collecting together vertex source information.
StringStream stringstream
float Real
Software floating point type.
Structure for automatic LOD configuration.
PMEdge(PMVertex *destination)
void computeNormal()
Vertex ID in the buffer associated with the submeshID.
unsigned int getVertexID(const PMVertex *v) const
bool hasVertex(const PMVertex *v) const
unsigned int vertexID[3]
ID of the submesh. Usable with mMesh.getSubMesh() function.
ProgressiveMeshGenerator * mGen
PMVertexHash(ProgressiveMeshGenerator *gen)
PMVertex * collapseTo
Triangle ID set, which are using this vertex.
CollapseCostHeap::iterator costHeapPosition
void addNotExists(const T &item)
iterator add(const T &item)
void replaceExists(const T &oldItem, const T &newItem)
SmallVector< T, S >::iterator iterator
bool remove(const T &item)
iterator find(const T &item)
void removeExists(const T &item)
iterator findExists(const T &item)
std::multimap< K, V, P, A > type