D3DXSplitMesh
メッシュを、指定したサイズよりも細かいメッシュに分割します。
void
D3DXSplitMesh(
LPD3DXMESH pMeshIn,
CONST DWORD * pAdjacencyIn,
CONST DWORD MaxSize,
CONST DWORD Options,
DWORD * pMeshesOut,
LPD3DXBUFFER * ppMeshArrayOut,
LPD3DXBUFFER * ppAdjacencyArrayOut,
LPD3DXBUFFER * ppFaceRemapArrayOut,
LPD3DXBUFFER * ppVertRemapArrayOut
);
パラメータ
- pMeshIn
ソース メッシュを表す ID3DXMesh インターフェイスへのポインターです。 - pAdjacencyIn
面ごとの 3 つの DWORD 値を格納する配列へのポインターです。この配列によって、単純化するメッシュの各面に隣接した 3 つの面を定義します。 - MaxSize
生成されるメッシュの頂点の最大数です。 - Options
新しいメッシュのオプション フラグです。 - pMeshesOut
返されるメッシュの数です。 - ppMeshArrayOut
新しいメッシュの ID3DXMesh インターフェイスの配列が格納されるバッファーです。ソース メッシュを n 個のメッシュに分割する場合、ppMeshArrayOut は n 個の ID3DXMesh ポインターの配列になります。 - ppAdjacencyArrayOut
新しいメッシュの隣接性配列 (DWORD) の配列が格納されるバッファーです。「ID3DXBuffer」を参照してください。このパラメーターは省略可能です。 - ppFaceRemapArrayOut
新しいメッシュの面再マップ配列 (DWORD) の配列が格納されるバッファーです。「ID3DXBuffer」を参照してください。このパラメーターは省略可能です。 - ppVertRemapArrayOut
新しいメッシュの頂点再マップ配列の配列が格納されるバッファーです。「ID3DXBuffer」を参照してください。このパラメーターは省略可能です。
戻り値
成功すると、D3D_OK を返します。失敗した場合は、次のいずれかの値を返します。D3DERR_INVALIDCALL、D3DXERR_INVALIDDATA、E_OUTOFMEMORY
解説
一般に、この関数は、32 ビットのインデックスを持つ (頂点が 65535 個よりも多い) メッシュを、それぞれが 16 ビットのインデックスを持つ複数のメッシュに分割する場合に使用されます。
隣接性配列、頂点再マップ配列、および面再マップ配列は DWORD の配列です。各配列には n 個の DWORD ポインターが格納されるほか、それらのポインターで参照する DWORD データが続けて格納されます。たとえば、メッシュ 2 の面 3 についての面再マップ情報を取得する場合は、次のようなコードを使用できます。ここでは、面再マップ データが ppFaceRemapArrayOut という名前の変数で返されるものと仮定しています。
const DWORD **face_remaps = static_cast<DWORD **>(ppFaceRemapArrayOut->GetBufferPointer()); const DWORD remap = face_remaps[2][3];
要件
ヘッダー: D3DX9Mesh.h 宣言
ライブラリ: D3dx9.lib 内容