次の方法で共有


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

要件

要件
ヘッダー
D3DX9Mesh.h
ライブラリ
D3dx9.lib

関連項目

メッシュ関数