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
規格需求
需求 | 值 |
---|---|
標頭 |
|
程式庫 |
|
另請參閱