public void GenerateLodLevels( LodValueList lodValues, ProgressiveMesh.VertexReductionQuota reductionMethod,
Real reductionValue )
{
RemoveLodLevels();
LogManager.Instance.Write( "Generating {0} lower LODs for mesh {1}.", lodValues.Count, Name );
foreach ( var subMesh in this._subMeshList )
{
// check if triangles are present
if ( subMesh.IndexData.indexCount > 0 )
{
// Set up data for reduction
var vertexData = subMesh.useSharedVertices ? this._sharedVertexData : subMesh.vertexData;
var pm = new ProgressiveMesh( vertexData, subMesh.indexData );
pm.Build( (ushort)lodValues.Count, subMesh.lodFaceList, reductionMethod, reductionValue );
}
else
{
// create empty index data for each lod
for ( var i = 0; i < lodValues.Count; ++i )
{
subMesh.LodFaceList.Add( new IndexData() );
}
}
}
// Iterate over the lods and record usage
foreach ( var value in lodValues )
{
// Record usage
var lod = new MeshLodUsage();
lod.UserValue = value;
lod.Value = this._lodStrategy.TransformUserValue( value );
lod.EdgeData = null;
lod.ManualMesh = null;
this.meshLodUsageList.Add( lod );
}
}