Funzione D3DXWeldVertices
Saldature insieme vertici replicati con attributi uguali. Questo metodo usa i valori epsilon specificati per i confronti di uguaglianza.
Sintassi
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
);
Parametri
-
pMesh [in]
-
Tipo: LPD3DXMESH
Puntatore a un oggetto ID3DXMesh , la mesh da cui saldare i vertici.
-
Flag [in]
-
Tipo: DWORD
Combinazione di uno o più flag da D3DXWELDEPSILONSFLAGS.
-
pEpsilons [in]
-
Tipo: const D3DXWeldEpsilons*
Puntatore a una struttura D3DXWeldEpsilons , specificando i valori epsilon da utilizzare per questo metodo. Utilizzare NULL per inizializzare tutti i membri della struttura in un valore predefinito pari a 1,0e-6f.
-
pAdjacencyIn [in]
-
Tipo: const DWORD*
Puntatore a una matrice di tre DWORD per viso che specificano i tre vicini per ogni viso nella mesh di origine. Se il bordo non ha visi adiacenti, il valore è 0xffffffff. Se questo parametro è impostato su NULL, verrà chiamato ID3DXBaseMesh::GenerateAdjacency per creare informazioni di adiacenza logica.
-
pAdjacencyOut [in, out]
-
Tipo: DWORD*
Puntatore a una matrice di tre DWORD per viso che specificano i tre vicini per ogni viso nella mesh ottimizzata. Se il bordo non ha visi adiacenti, il valore è 0xffffffff.
-
pFaceRemap [out]
-
Tipo: DWORD*
Matrice di DWORD, una per viso, che identifica il viso della mesh originale che corrisponde a ogni viso della mesh saldata.
-
ppVertexRemap [out]
-
Tipo: LPD3DXBUFFER*
Indirizzo di un puntatore a un'interfaccia ID3DXBuffer , che contiene un DWORD per ogni vertice che specifica la modalità di mapping dei nuovi vertici ai vertici precedenti. Questa nuova mappa è utile se è necessario modificare i dati esterni in base al nuovo mapping dei vertici.
Valore restituito
Tipo: HRESULT
Se la funzione ha esito positivo, il valore restituito viene D3D_OK. Se la funzione ha esito negativo, il valore restituito può essere uno dei seguenti: D3DERR_INVALIDCALL, E_OUTOFMEMORY.
Commenti
Questa funzione usa informazioni sull'adiacenza fornite per determinare i punti replicati. I vertici vengono uniti in base a un confronto di epsilon. I vertici con posizione uguale devono essere già stati calcolati e rappresentati da dati rappresentativi del punto.
Questa funzione combina vertici saldati logicamente con componenti simili, ad esempio normali o coordinate di trama all'interno di pEpsilons.
Il codice di esempio seguente chiama questa funzione con saldatura abilitata. I vertici vengono confrontati usando valori epsilon per la posizione normale del vettore e del vertice. Un puntatore viene restituito a una matrice di mapping del viso (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
Requisiti
Requisito | Valore |
---|---|
Intestazione |
|
Libreria |
|
Vedi anche