D3DXWeldVertices
複製され等しい属性を持つ頂点を結合します。このメソッドは、指定した Epsilon 値を使用して等価性を比較します。
HRESULT
D3DXWeldVertices(
LPD3DXMESH pMesh,
DWORD Flags,
CONST D3DXWeldEpsilons * pEpsilons,
CONST DWORD * pAdjacencyIn,
DWORD * pAdjacencyOut,
DWORD * pFaceRemap,
LPD3DXBUFFER * ppVertexRemap
);
パラメータ
- pMesh
ID3DXMesh オブジェクト (頂点結合の元となるメッシュ) へのポインターです。 - Flags
D3DXWELDEPSILONSFLAGS からの 1 つ以上のフラグの組み合わせです。 - pEpsilons
D3DXWeldEpsilons 構造体へのポインターです。このメソッドに使用する Epsilon 値を指定します。NULL を使用すると、すべての構造体メンバーがデフォルト値の 1.0e-6f に初期化されます。 - pAdjacencyIn
3 つの DWORD 値を格納する配列へのポインターです。この配列によって、ソース メッシュの各面に隣接した 3 つの面を定義します。エッジが隣接面を持たない場合の値は 0xffffffff です。このパラメーターが NULL の場合、ID3DXBaseMesh::GenerateAdjacency が呼び出されて、論理隣接性情報が作成されます。 - pAdjacencyOut
3 つの DWORD 値を格納する配列へのポインターです。この配列によって、最適化するメッシュの各面に隣接した 3 つの面を定義します。エッジが隣接面を持たない場合の値は 0xffffffff です。 - pFaceRemap
各面に 1 つの DWORD の配列です。この配列によって、結合するメッシュの各面に対応する元のメッシュ面を識別します。 - ppVertexRemap
新しい頂点を古い頂点にマッピングする方法を指定する各頂点の DWORD を保持する ID3DXBuffer インターフェイスへのポインターのアドレスです。この再マップは、新しい頂点マッピングに基づいて外部データを変更する必要がある場合に役立ちます。
戻り値
成功すると、D3D_OK を返します。失敗した場合は、次の戻り値のいずれかを返します。D3DERR_INVALIDCALL、E_OUTOFMEMORY
解説
この関数は、指定された隣接情報を使用して、複製するポイントを判定します。Epsilon 値に対する比較に基づいて頂点が結合されます。同じ位置の頂点をあらかじめ判定し、ポイント表現データを使って表現しておく必要があります。
この関数は、pEpsilons 内の法線やテクスチャー座標のような類似する成分を持つ論理的に結合された頂点を組み合わせます。
次のサンプル コードは、この関数を結合を有効にして呼び出します。頂点は、法線ベクトルと頂点位置について Epsilon 値を使って比較されます。ポインターは、面の再マッピング配列 (pFaceRemap) に返されます。
TCHAR strMediaPath[512]; // X-file path LPD3DXBUFFER pAdjacencyBuffer = NULL; // adjacency data buffer LPD3DXBUFFER pD3DXMtrlBuffer = NULL; // material buffer LPD3DXMESH pMesh = NULL; // mesh object DWORD m_dwNumMaterials; // number of materials D3DXWELDEPSILONS Epsilons; // structure with epsilon values DWORD *pFaceRemap[65536]; // face remapping array DWORD i; // internal variable // Load the mesh from the specified file hr = D3DXLoadMeshFromX ( strMediaPath, D3DXMESH_MANAGED, m_pd3dDevice, &pAdjacencyBuffer, &pD3DXMtrlBuffer, NULL, &m_dwNumMaterials, &pMesh ) ) if( FAILED( hr ) ) goto End; // Go to error handling // Set epsilon values Epsilons.Normal = 0.001; Epsilons.Position = 0.1; // Weld the vertices for( i=0; i < 65536; i++ ) { pFaceRemap[i] = 0; } hr = D3DXWeldVertices ( pMesh, D3DXWELDEPSILONS_WELDPARTIALMATCHES, &Epsilons, (DWORD*)pAdjacencyBuffer->GetBufferPointer(), (DWORD*)pAdjacencyBuffer->GetBufferPointer(), (DWORD*)pFaceRemap, NULL ) if( FAILED( hr ) ) goto End; // Go to error handling
要件
ヘッダー: D3DX9Mesh.h 宣言
ライブラリ: D3dx9.lib 内容