#include <OgreProgressiveMesh.h>
Public Types | |
typedef std::vector< IndexData * > | LODFaceList |
enum | VertexReductionQuota { VRQ_CONSTANT, VRQ_PROPORTIONAL } |
The way to derive the quota of vertices which are reduced at each LOD. More... | |
Public Methods | |
ProgressiveMesh (const VertexData *vertexData, const IndexData *indexData) | |
Constructor, takes the geometry data and index buffer. | |
virtual | ~ProgressiveMesh () |
virtual void | addExtraVertexPositionBuffer (const VertexData *vertexData) |
Adds an extra vertex position buffer. | |
virtual void | build (ushort numLevels, LODFaceList *outList, VertexReductionQuota quota=VRQ_PROPORTIONAL, Real reductionValue=0.5f) |
Builds the progressive mesh with the specified number of levels. | |
Protected Types | |
typedef std::vector< PMTriangle > | TriangleList |
typedef std::vector< PMFaceVertex > | FaceVertexList |
typedef std::vector< PMVertex > | CommonVertexList |
typedef std::vector< Real > | WorstCostList |
typedef std::vector< PMWorkingData > | WorkingDataList |
Protected Methods | |
void | addWorkingData (const VertexData *vertexData, const IndexData *indexData) |
Internal method for building PMWorkingData from geometry data. | |
void | initialiseEdgeCollapseCosts (void) |
Internal method for initialising the edge collapse costs. | |
Real | computeEdgeCollapseCost (PMVertex *src, PMVertex *dest) |
Internal calculation method for deriving a collapse cost from u to v. | |
Real | computeEdgeCostAtVertexForBuffer (WorkingDataList::iterator idata, size_t vertIndex) |
Internal method evaluates all collapse costs from this vertex and picks the lowest for a single buffer. | |
void | computeEdgeCostAtVertex (size_t vertIndex) |
Internal method evaluates all collapse costs from this vertex for every buffer and returns the worst. | |
void | computeAllCosts (void) |
Internal method to compute edge collapse costs for all buffers /. | |
size_t | getNextCollapser (void) |
Internal method for getting the index of next best vertex to collapse. | |
void | bakeNewLOD (IndexData *pData) |
Internal method builds an new LOD based on the current state. | |
void | collapse (PMVertex *collapser) |
Internal method, collapses vertex onto it's saved collapse target. | |
void | dumpContents (const String &log) |
Internal debugging method. | |
Protected Attributes | |
const VertexData * | mpVertexData |
const IndexData * | mpIndexData |
size_t | mCurrNumIndexes |
size_t | mNumCommonVertices |
WorkingDataList | mWorkingData |
Multiple copies, 1 per vertex buffer. | |
WorstCostList | mWorstCosts |
The worst collapse cost from all vertex buffers for each vertex. |
This class is dedicated to reducing the number of triangles in a given mesh taking into account seams in both geometry and texture co-ordinates and meshes which have multiple frames.
The primary use for this is generating LOD versions of Mesh objects, but it can be used by any geometry provider. The only limitation at the moment is that the provider uses a common vertex buffer for all LODs and one index buffer per LOD. Therefore at the moment this class can only handle indexed geometry.
NB the interface of this class will certainly change when compiled vertex buffers are supported.
Definition at line 55 of file OgreProgressiveMesh.h.
|
Definition at line 183 of file OgreProgressiveMesh.h. |
|
Definition at line 182 of file OgreProgressiveMesh.h. |
|
Definition at line 68 of file OgreProgressiveMesh.h. |
|
Definition at line 181 of file OgreProgressiveMesh.h. |
|
Definition at line 194 of file OgreProgressiveMesh.h. |
|
Definition at line 184 of file OgreProgressiveMesh.h. |
|
The way to derive the quota of vertices which are reduced at each LOD.
Definition at line 60 of file OgreProgressiveMesh.h. |
|
Constructor, takes the geometry data and index buffer.
Definition at line 62 of file OgreProgressiveMesh.cpp. References addWorkingData(), mpIndexData, mpVertexData, mWorstCosts, and Ogre::VertexData::vertexCount. |
|
Definition at line 74 of file OgreProgressiveMesh.cpp. |
|
Adds an extra vertex position buffer.
Definition at line 78 of file OgreProgressiveMesh.cpp. References addWorkingData(), and mpIndexData. |
|
|
Internal method builds an new LOD based on the current state.
Definition at line 656 of file OgreProgressiveMesh.cpp. References Ogre::IndexData::indexBuffer, Ogre::IndexData::indexCount, Ogre::IndexData::indexStart, mCurrNumIndexes, mpIndexData, and mWorkingData. Referenced by build(). |
|
Builds the progressive mesh with the specified number of levels.
Definition at line 83 of file OgreProgressiveMesh.cpp. References bakeNewLOD(), collapse(), Ogre::ProgressiveMesh::PMVertex::collapseTo, computeAllCosts(), dumpContents(), getNextCollapser(), Ogre::ProgressiveMesh::PMVertex::index, Ogre::IndexData::indexCount, Ogre::ProgressiveMesh::PMVertex::isBorder(), mCurrNumIndexes, mNumCommonVertices, mpIndexData, mWorkingData, Ogre::Real, Ogre::ProgressiveMesh::PMVertex::removed, Ogre::ushort, and VRQ_PROPORTIONAL. Referenced by Ogre::Mesh::generateLodLevels(). |
|
Internal method, collapses vertex onto it's saved collapse target.
Definition at line 507 of file OgreProgressiveMesh.cpp. References Ogre::ProgressiveMesh::PMVertex::collapseCost, Ogre::ProgressiveMesh::PMVertex::collapseTo, computeEdgeCostAtVertex(), Ogre::ProgressiveMesh::PMVertex::face, Ogre::ProgressiveMesh::PMVertex::index, mCurrNumIndexes, mWorstCosts, Ogre::ProgressiveMesh::PMVertex::neighbor, NEVER_COLLAPSE_COST, Ogre::ProgressiveMesh::PMVertex::notifyRemoved(), and Ogre::ProgressiveMesh::PMVertex::toBeRemoved. Referenced by build(). |
|
Internal method to compute edge collapse costs for all buffers /.
Definition at line 497 of file OgreProgressiveMesh.cpp. References computeEdgeCostAtVertex(), initialiseEdgeCollapseCosts(), mpVertexData, and Ogre::VertexData::vertexCount. Referenced by build(). |
|
Internal calculation method for deriving a collapse cost from u to v.
Definition at line 282 of file OgreProgressiveMesh.cpp. References Ogre::Vector3::dotProduct(), Ogre::ProgressiveMesh::PMVertex::face, Ogre::ProgressiveMesh::PMVertex::isBorder(), Ogre::ProgressiveMesh::PMVertex::isManifoldEdgeWith(), Ogre::ProgressiveMesh::PMVertex::neighbor, NEVER_COLLAPSE_COST, Ogre::Vector3::normalise(), Ogre::ProgressiveMesh::PMVertex::position, Ogre::Real, and Ogre::ProgressiveMesh::PMVertex::seam. Referenced by computeEdgeCostAtVertexForBuffer(). |
|
Internal method evaluates all collapse costs from this vertex for every buffer and returns the worst.
Definition at line 623 of file OgreProgressiveMesh.cpp. References computeEdgeCostAtVertexForBuffer(), mWorkingData, mWorstCosts, and Ogre::Real. Referenced by collapse(), and computeAllCosts(). |
|
Internal method evaluates all collapse costs from this vertex and picks the lowest for a single buffer.
Definition at line 458 of file OgreProgressiveMesh.cpp. References computeEdgeCollapseCost(), NEVER_COLLAPSE_COST, and Ogre::Real. Referenced by computeEdgeCostAtVertex(). |
|
Internal debugging method.
Definition at line 932 of file OgreProgressiveMesh.cpp. References mNumCommonVertices, mWorkingData, and mWorstCosts. Referenced by build(). |
|
Internal method for getting the index of next best vertex to collapse.
Definition at line 638 of file OgreProgressiveMesh.cpp. References mNumCommonVertices, mWorstCosts, NEVER_COLLAPSE_COST, and Ogre::Real. Referenced by build(). |
|
Internal method for initialising the edge collapse costs.
Definition at line 440 of file OgreProgressiveMesh.cpp. References mWorkingData, and NEVER_COLLAPSE_COST. Referenced by computeAllCosts(). |
|
Definition at line 112 of file OgreProgressiveMesh.h. Referenced by bakeNewLOD(), build(), and collapse(). |
|
Definition at line 113 of file OgreProgressiveMesh.h. Referenced by addWorkingData(), build(), dumpContents(), and getNextCollapser(). |
|
Definition at line 110 of file OgreProgressiveMesh.h. Referenced by addExtraVertexPositionBuffer(), bakeNewLOD(), build(), and ProgressiveMesh(). |
|
Definition at line 109 of file OgreProgressiveMesh.h. Referenced by computeAllCosts(), and ProgressiveMesh(). |
|
Multiple copies, 1 per vertex buffer.
Definition at line 196 of file OgreProgressiveMesh.h. Referenced by addWorkingData(), bakeNewLOD(), build(), computeEdgeCostAtVertex(), dumpContents(), and initialiseEdgeCollapseCosts(). |
|
The worst collapse cost from all vertex buffers for each vertex.
Definition at line 199 of file OgreProgressiveMesh.h. Referenced by collapse(), computeEdgeCostAtVertex(), dumpContents(), getNextCollapser(), and ProgressiveMesh(). |
Copyright © 2002-2003 by The OGRE Team
Last modified Fri May 14 23:26:56 2004