一個のTSXMeshオブジェクトは、一個のメッシュを保持します。
SXLibにおけるメッシュとは、Direct3Dが頂点データで表現出来るものだけを格納する物であり、テクスチャなどの情報は含みません。なぜなら、2Pカラーを作る事を省メモリコストで実現するためです(w
独自形式である、SXファイルの読み込みに対応しています。Direct3D RMの、Xファイルからのコンバートには、付属のSXSimplifyをお使いください。
内部的には、描画時にはTRIANGLELISTとしてDrawIndexedPrimitiveで一括描画されます。また、メッシュを構成する全ての面は三角形です。
IBufが格納する頂点インデクスのうち、連続する3つの頂点インデクスが指し示す、3つの頂点によって、一つの三角形を張ります。
(凡例:
読み取り専用
Published)
| メッシュの内容 | VBuf | |
| IBuf | ||
| メッシュの情報 | FaceCount | |
| 外接 | Box | |
| Sphere | ||
| Capsule |
| コンストラクタ | Create |
| デストラクタ | Destroy |
| 描画 | Draw |
| DrawPartial | |
| ファイルI/O | LoadFromStream |
| LoadFromFile | |
| SaveToStream | |
| SaveToFile | |
| バッファ設定 | SetupBuffers |
| メッシュの最適化 | Compact |
| Optimize | |
| 外接 | UpdateBounds |
VBuf : TDGVertexBuffer IBuf : TDGIndexBuffer
メッシュを構成する頂点バッファ、頂点インデクスバッファを示します。
FaceCount : UINT
メッシュを構成する面の数を返します。
常にIBuf.Count div 3と同じ値になります。
Box:TBox3D; Sphere:TSphere3D; Capsule:TCapsule3D;
メッシュを構成する頂点を全て含むような 箱型、球、カプセル(半径付き線分)をそれぞれ示します
constructor Create (AOwner:TDGCarad);
TSXMeshオブジェクトを初期化します。
AOwnerには、使用するTDGCaradコンポーネントを指定してください。
destructor Destroy;
TSXMeshオブジェクトを解放します。
procedure Draw;
メッシュを描画します。
TDGCarad.D3DDevice.BeginRender 〜 TDGCarad.D3DDevice.EndRenderの間に書いてください。
procedure DrawPartial(start:UINT; primCount:UINT);
メッシュのうち、startで始まる頂点インデクスから、primCount個の三角形の分だけ、描画を行います。
TDGCarad.D3DDevice.BeginRender 〜 TDGCarad.D3DDevice.EndRenderの間に書いてください。
procedure LoadFromStream(s:TStream); procedure LoadFromFile(fileName:String, qdaName:String = '');
ストリームまたはファイルから、SXファイル形式のメッシュを読み込みます。
LoadFromFileメソッドにおいて、qdaNameを空文字列以外にすると、QDAファイル内のデータID = fileNameというデータを読み込みます。
procedure SaveToStream(s:TStream); procedure SaveToFile(filename:String);
ストリームまたはファイルへ、メッシュをSXファイル形式で保存します。
procedure SetupBuffers(newVertexCount, newIndexCount:UINT; FVF:DWord; VertexSize:UINT; Pool:D3DPOOL);
newVertexCountでVBufの大きさ(頂点数)、newIndexCountで頂点インデクスバッファの大きさ(頂点インデクス数)を指定します。
FVFで、頂点フォーマットについてのフラグを指定します。
Poolには、VertexBuffer, IndexBufferのメモリクラス(どこにそれぞれのメモリを確保するか)を指定します。以下の値が有効です。
| D3DPOOL_DEFAULT | ドライバ側でもっとも適切な場所 (おそらくビデオメモリ又はAGPメモリ) を割り当て、そこに格納します。もっとも高速ですが、Direct3DDeviceのロストや再生成が起こると、内容は消去されっぱなしになります。自動復元の必要の無いリソースに用いてください |
| D3DPOOL_MANAGED | 必要に応じて、デバイスからアクセスできるメモリに自動的にコピーされます。自動復元が利きますので、基本的には全てのリソースはこれを指定して生成されることになるでしょう。ただし、内容をロックなどで書き換える都度、メモリにコピーする処理が必要になるので、毎フレーム内容を全部書き換える必要のあるようなリソースには向きません |
| D3DPOOL_SYSTEMMEM | システムメモリに生成されます。これも自動復元が利きます。環境によってはDirect3DDeviceからアクセスできません。バッファ用途に使うことになるでしょう |
procedure Compact;
重複する情報を持っている頂点データをVBufの中から探して、消去します。IBufの内容はそれに併せて適宜書き換えられます。
procedure Optimize;
VertexBufferの中身を頂点キャッシュを意識して、頂点インデクス(IBuf)の内容を並び替えます。
IBufの中身が変更されますが、VBufの中身に変更は行われません。
procedure UpdateBounds;
外接情報(Box, Sphere, Capsule)を更新します。
VBufをロックして中身を書き換えた後などには、必ず実行してください。
LoadFromFileなどで読み出した際には、内部で自動的にこのメソッドが呼ばれます。