Tips
D3DXのメッシュサポート
D3DX は、x ファイルの内容のロード、操作、レンダリングを行うためのメッシュ コンストラクトを実装しています。
メッシュとは、基本的には、何らかのジオメトリを定義している頂点の集合と、
面を定義しているインデックスのセットです。D3DX のメッシュにはいくつかの種類があります。
ID3DXBaseMesh は基本的な機能を提供しています。
ID3DXMesh と ID3DXPMesh は ID3DXBaseMesh を継承しており、
それぞれチップ単位の頂点キャッシュを使用したメッシュ最適化と、
Hughes Hoppes のプログレッシブ メッシュの研究に基づくプログレッシブ メッシュを追加しています。
ID3DXSPMesh は単純化メッシュを、ID3DXSkinMesh はスキン メッシュ サポートを提供します。
この階層は次のようになっています。
- ベース メッシュ
- ID3DXBaseMesh
- これは基底メッシュ クラスであり、インスタンス化してはなりません。他のすべてのメッシュ クラスはこのクラスを継承します
- 最適化メッシュ
- ID3DXMesh (ID3DXBaseMesh)
- 大部分のオブジェクト表現に使用される標準のメッシュ オブジェクトを定義する基本的なメッシュ クラスです。
- プログレッシブ メッシュ
- ID3DXPMesh (ID3DXBaseMesh)
- オブジェクトをプログレッシブ メッシュ形式で表現する手段を定義する、基本的なメッシュ クラスの拡張です。プログレッシブ メッシュでは、メッシュ オブジェクトをプログレッシブにリファインしていくことができます。
- 単純化メッシュ
- ID3DXSPMesh (ID3DXMesh)
- 特定のメッシュを面の数の少ないメッシュに単純化するために使用される単純化メッシュを定義する、基本的なメッシュ クラスの拡張です。
- スキン メッシュ
- ID3DXSkinMesh (ID3DXMesh)
- プログレッシブ メッシュ
- LODを使うときに必要。他にもいろいろ。
- パッチ メッシュ
- 特殊なタイプのパッチ メッシュとして、矩形パッチと三角形パッチの 2 つもサポートされています。矩形パッチメッシュは、制御点が曲がった矩形シーケンスとしてレイアウトされるパッチメッシュです。矩形パッチと三角形パッチは、高次サーフェイスを作成するために使われます。パッチメッシュは三角形メッシュほど一般的には使われません。
D3Dデバイス
指定の Microsoft Direct3D オブジェクトによって作成されたレンダリング デバイスは、すべて同じ物理リソースを共有します。
単一の Direct3D オブジェクトから複数のレンダリング デバイスを作成することは可能ですが、これらはすべて同じハードウェアを共有するため、パフォーマンスが大きく低下します。
アラインメント構造体
16 バイト整列の行列は、D3DX の算術関数で使うとき、Pentium 4 プロセッサでのパフォーマンスを上げるために最適化されています。行列は、プログラム スタック、ヒープ、グローバルスコープなどの行列の作成場所に関係なく整列されます。整列は __declspec(align(16)) を使って行われ、これは Microsoft Visual
C++ .NET と Visual C++ 6.0 ではプロセッサパックがインストールされている場合にのみ動作します。ただし、プロセッサ パックを検出する方法はないため、デフォルトでバイト整列が有効なのは Visual C++ .NET のみです。
D3DX では、ベクトルとクォータニオンはバイト整列されません。D3DX の算術関数でベクトルやクォータニオンを使う場合は、_declspec(align(16)) を使ってバイト整列のベクトルやクォータニオンを生成します。その方が、パフォーマンスが大幅に向上します。
最終更新:2008年03月30日 17:55