29 #ifndef __ProgressiveMeshGenerator_H_
30 #define __ProgressiveMeshGenerator_H_
89 template<
typename T,
unsigned S>
110 struct PMCollapseCostLess;
168 unsigned int vertexID[3];
217 template<
typename IndexType>
232 bool hasSrcID(
unsigned int srcID,
unsigned short submeshID);
233 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()
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
PMEdge * getPointer(VEdges::iterator it)
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)
multimap< Real, PMVertex * >::type CollapseCostHeap
void addEdge(PMVertex *v, const PMEdge &edge)
vector< PMCollapsedEdge >::type CollapsedEdges
PMTriangle * findSideTriangle(const PMVertex *v1, const PMVertex *v2)
Real computeEdgeCollapseCost(PMVertex *src, PMEdge *dstEdge)
CollapseCostHeap mCollapseCostHeap
size_t calcLodVertexCount(const LodLevel &lodConfig)
IndexBufferInfoList mIndexBufferInfoList
PMTriangle * isDuplicateTriangle(PMTriangle *triangle)
VectorSet< PMTriangle *, 7 > VTriangles
void collapse(PMVertex *vertex)
vector< PMTriangle >::type TriangleList
CollapsedEdges tmpCollapsedEdges
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)
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.
bool operator<(SharedPtr< T > const &a, SharedPtr< U > const &b)
bool operator==(STLAllocator< T, P > const &, STLAllocator< T2, P > const &)
determine equality, can memory from another allocator be released by this allocator,...
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
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)
SmallVector< T, S >::iterator iterator
void replaceExists(const T &oldItem, const T &newItem)
bool remove(const T &item)
iterator find(const T &item)
void removeExists(const T &item)
iterator findExists(const T &item)