Share via


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
D3DX9Mesh.h
Libreria
D3dx9.lib

Vedi anche

Funzioni mesh