D3DXWeldVertices 関数
同じ属性を持つレプリケートされた頂点を結合します。 このメソッドは、等値比較に指定された epsilon 値を使用します。
構文
HRESULT D3DXWeldVertices(
_In_ LPD3DXMESH pMesh,
_In_ DWORD Flags,
_In_ const D3DXWeldEpsilons *pEpsilons,
_In_ const DWORD *pAdjacencyIn,
_Inout_ DWORD *pAdjacencyOut,
_Out_ DWORD *pFaceRemap,
_Out_ LPD3DXBUFFER *ppVertexRemap
);
パラメーター
-
pMesh [in]
-
種類: LPD3DXMESH
頂点を溶接するメッシュである ID3DXMesh オブジェクトへのポインター。
-
Flags [in]
-
型: DWORD
D3DXWELDEPSILONSFLAGS からの 1 つ以上のフラグの組み合わせ。
-
pEpsilons [in]
-
型: const D3DXWeldEpsilons*
このメソッドに使用する epsilon 値を指定する D3DXWeldEpsilons 構造体へのポインター。 NULL を使用して、すべての構造体メンバーを既定値の 1.0e-6f に初期化します。
-
pAdjacencyIn [in]
-
型: const DWORD*
ソース メッシュ内の各面の 3 つの近傍を指定する、1 つの面に 3 つの DWORD の配列へのポインター。 エッジに隣接する面がない場合、値は0xffffffff。 このパラメーターが NULL に設定されている場合、 ID3DXBaseMesh::GenerateAdjacency が呼び出され、論理隣接情報が作成されます。
-
pAdjacencyOut [in, out]
-
型: DWORD*
最適化されたメッシュ内の各面の 3 つの近傍を指定する、1 つの面に 3 つの DWORD の配列へのポインター。 エッジに隣接する面がない場合、値は0xffffffff。
-
pFaceRemap [out]
-
型: DWORD*
溶接メッシュ内の各面に対応する元のメッシュ面を識別する DWORD の配列(面ごとに 1 つ)。
-
ppVertexRemap [out]
-
種類: LPD3DXBUFFER*
ID3DXBuffer インターフェイスへのポインターのアドレス。新しい頂点が古い頂点にどのようにマップされるかを指定する各頂点の DWORD が含まれます。 この再マップは、新しい頂点マッピングに基づいて外部データを変更する必要がある場合に便利です。
戻り値
型: HRESULT
関数が成功した場合、戻り値はD3D_OK。 関数が失敗した場合、戻り値は次のいずれかになります:D3DERR_INVALIDCALL、E_OUTOFMEMORY。
解説
この関数は、指定された隣接性情報を使用して、レプリケートされるポイントを決定します。 頂点は、epsilon 比較に基づいてマージされます。 位置が等しい頂点は、ポイント代表データによって既に計算および表されている必要があります。
この関数は、pEpsilon 内の法線やテクスチャ座標など、類似のコンポーネントを持つ論理的に溶接された頂点を結合します。
次のコード例では、溶接を有効にしてこの関数を呼び出します。 頂点は、法線ベクトルと頂点の位置に 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
要件
要件 | 値 |
---|---|
ヘッダー |
|
ライブラリ |
|
関連項目