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物件的指標,這是從中到接縫頂點的網格。

旗標 [in]

類型: DWORD

來自 D3DXWELDEPSILONSFLAGS的一或多個旗標組合。

pEpsilons [in]

類型:const D3DXWeldEpsilons*

D3DXWeldEpsilons結構的指標,指定要用於此方法的 epsilon 值。 使用 Null 將所有結構成員初始化為預設值 1.0e-6f。

pAdjacencyIn [in]

類型:const DWORD*

每個臉部三個 DWORD 陣列的指標,指定來源網格中每個臉部的三個芳鄰。 如果邊緣沒有連續的臉部,此值會0xffffffff。 如果此參數設定為 Null,則會呼叫 ID3DXBaseMesh::GenerateAdjacency 來建立邏輯相鄰資訊。

pAdjacencyOut [in, out]

類型: DWORD*

每個臉部三個 DWORD 陣列的指標,指定優化網格中每個臉部的三個芳鄰。 如果邊緣沒有連續的臉部,此值會0xffffffff。

pFaceRemap [out]

類型: DWORD*

DWORD 的陣列,每個臉部一個,可識別與接合網格中每個表面相對應的原始網格面。

ppVertexRemap [out]

類型: LPD3DXBUFFER*

ID3DXBuffer介面指標的位址,其中包含每個頂點的 DWORD,指定新頂點對應至舊頂點的方式。 如果您需要根據新的頂點對應來改變外部資料,此重新對應就很有用。

傳回值

類型: HRESULT

如果函式成功,傳回值會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

另請參閱

網格函數