次の方法で共有


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 内容