TSXMesh

タスク

 一個の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
IBuf

VBuf : TDGVertexBuffer
IBuf : TDGIndexBuffer

 メッシュを構成する頂点バッファ、頂点インデクスバッファを示します。

 

FaceCount

FaceCount : UINT

 メッシュを構成する面の数を返します。

 常にIBuf.Count div 3と同じ値になります。

 

Box
Sphere
Capsule

Box:TBox3D;
Sphere:TSphere3D;
Capsule:TCapsule3D;

 メッシュを構成する頂点を全て含むような 箱型、球、カプセル(半径付き線分)をそれぞれ示します

 

リファレンス〜メソッド

Create

constructor Create (AOwner:TDGCarad);

 TSXMeshオブジェクトを初期化します。

 AOwnerには、使用するTDGCaradコンポーネントを指定してください。


Destroy

destructor Destroy;

 TSXMeshオブジェクトを解放します。


Draw

procedure Draw;

 メッシュを描画します。

 TDGCarad.D3DDevice.BeginRender 〜 TDGCarad.D3DDevice.EndRenderの間に書いてください。


DrawPartial

procedure DrawPartial(start:UINT; primCount:UINT);

 メッシュのうち、startで始まる頂点インデクスから、primCount個の三角形の分だけ、描画を行います。

 TDGCarad.D3DDevice.BeginRender 〜 TDGCarad.D3DDevice.EndRenderの間に書いてください。


LoadFromStream
LoadFromFile

procedure LoadFromStream(s:TStream);
procedure LoadFromFile(fileName:String, qdaName:String = '');

 ストリームまたはファイルから、SXファイル形式のメッシュを読み込みます。

 LoadFromFileメソッドにおいて、qdaNameを空文字列以外にすると、QDAファイル内のデータID = fileNameというデータを読み込みます。

 

SaveToStream
SaveToFile

procedure SaveToStream(s:TStream);
procedure SaveToFile(filename:String);

 ストリームまたはファイルへ、メッシュをSXファイル形式で保存します。

 

SetupBuffers

procedure SetupBuffers(newVertexCount, newIndexCount:UINT; FVF:DWord;
  VertexSize:UINT; Pool:D3DPOOL);

 VBuf, IBuf を再設定します。

 newVertexCountでVBufの大きさ(頂点数)、newIndexCountで頂点インデクスバッファの大きさ(頂点インデクス数)を指定します。

 FVFで、頂点フォーマットについてのフラグを指定します。

 Poolには、VertexBuffer, IndexBufferのメモリクラス(どこにそれぞれのメモリを確保するか)を指定します。以下の値が有効です。

D3DPOOL_DEFAULT ドライバ側でもっとも適切な場所 (おそらくビデオメモリ又はAGPメモリ) を割り当て、そこに格納します。もっとも高速ですが、Direct3DDeviceのロストや再生成が起こると、内容は消去されっぱなしになります。自動復元の必要の無いリソースに用いてください
D3DPOOL_MANAGED 必要に応じて、デバイスからアクセスできるメモリに自動的にコピーされます。自動復元が利きますので、基本的には全てのリソースはこれを指定して生成されることになるでしょう。ただし、内容をロックなどで書き換える都度、メモリにコピーする処理が必要になるので、毎フレーム内容を全部書き換える必要のあるようなリソースには向きません
D3DPOOL_SYSTEMMEM システムメモリに生成されます。これも自動復元が利きます。環境によってはDirect3DDeviceからアクセスできません。バッファ用途に使うことになるでしょう

 

Compact

procedure Compact;

 重複する情報を持っている頂点データをVBufの中から探して、消去します。IBufの内容はそれに併せて適宜書き換えられます。


Optimize

procedure Optimize;

 VertexBufferの中身を頂点キャッシュを意識して、頂点インデクス(IBuf)の内容を並び替えます。

 IBufの中身が変更されますが、VBufの中身に変更は行われません。

 

UpdateBounds

procedure UpdateBounds;

 外接情報(Box, Sphere, Capsule)を更新します。

 VBufをロックして中身を書き換えた後などには、必ず実行してください。

 LoadFromFileなどで読み出した際には、内部で自動的にこのメソッドが呼ばれます。