ProgressiveMesh.OptimizeBaseLevelOfDetail(MeshFlags,Int32)
OptimizeBaseLevelOfDetail メソッド
使用例
- プログレッシブ メッシュのトリミングと最適化
オブジェクトのベースの詳細レベル (LOD) 部分を最適化する。
定義
Visual Basic | Public Sub OptimizeBaseLevelOfDetail( _ ByVal flags As MeshFlags, _ ByRef faceRemap As Integer _ ) |
C# | public void OptimizeBaseLevelOfDetail( MeshFlags flags, out int faceRemap ); |
Managed C++ | public: void OptimizeBaseLevelOfDetail( MeshFlags flags, int* faceRemap ); |
JScript | public function OptimizeBaseLevelOfDetail( flags : MeshFlags, faceRemap : int ) : void; |
パラメータ
flags | Microsoft.DirectX.Direct3D.MeshFlags. |
faceRemap | System.Int32[]. |
使用例
プログレッシブ メッシュのトリミングと最適化
この例では、詳細レベル (LOD) の最小値と最大値を変更することで、プログレッシブ メッシュをトリミングおよび最適化する方法を示す。ここでは ProgressiveMesh.TrimByVertices メソッドを使う。プログレッシブ メッシュとは、頂点情報を特殊なデータ ツリーとして内部的に格納するメッシュのことで、この情報にアクセスして任意の数の頂点を持つメッシュをレンダリングできる。
次のサンプル コードでは、10 次元配列のプログレッシブ メッシュを作成し、それぞれについて TrimByVertices メソッドと OptimizeBaseLevelOfDetail メソッドを使って、LOD の最小値と最大値を目的の値に設定している。TrimByVertices は各プログレッシブ メッシュのダイナミック レンジを小さくし、OptimizeBaseLevelOfDetail はメッシュの面と頂点を並べ替えてパフォーマンスを最適化する。結果として生成されるプログレッシブ メッシュの配列を使えば、同じオリジナル メッシュを 10 個の異なる LOD でレンダリングできる。
次の 2 つの MeshFlags 定数は、メッシュのコピー処理において設定される。
using Microsoft.DirectX.Direct3D;
protected Device device; // The rendering device
device = null;
Mesh pMesh = null;
Mesh pTempMesh = null;
ProgressiveMesh pPMesh = null;
ProgressiveMesh[] pmeshes = null;
GraphicsStream adj = null;
int cVerticesMin = 0;
int cVerticesMax = 0;
int cVerticesPerMesh = 0;
// Load pMesh from a file, and process as required
.
.
.
// Initialize a progressive mesh based upon original pMesh
pPMesh = new ProgressiveMesh(pMesh, adj, null, 1, MeshFlags.SimplifyVertex);
// Initialize minimum and maximum number of vertices, and step value
cVerticesMin = pPMesh.MinVertices;
cVerticesMax = pPMesh.MaxVertices;
cVerticesPerMesh = (cVerticesMax - cVerticesMin) / 10; // See next step
// Initialize a new 10-member progressive mesh array
pmeshes = new ProgressiveMesh[(int)Math.Max(1,
Math.Ceiling((cVerticesMax - cVerticesMin) / (float)cVerticesPerMesh))];
// Clone all the separate pmeshes
for (int iPMesh = 0; iPMesh < pmeshes.Length; iPMesh++)
{
pmeshes[iPMesh] = pPMesh.Clone( MeshFlags.Managed | MeshFlags.VbShare,
pPMesh.VertexFormat,
device);
// trim to appropriate space
pmeshes[iPMesh].TrimByVertices(
cVerticesMin + cVerticesPerMesh * iPMesh,
cVerticesMin + cVerticesPerMesh * (iPMesh+1));
pmeshes[iPMesh].OptimizeBaseLevelOfDetail(MeshFlags.OptimizeVertexCache);
}
対象
© 2002 Microsoft Corporation. All rights reserved. Terms of use.