Fonction D3DXWeldVertices

Soude les sommets répliqués qui ont des attributs égaux. Cette méthode utilise des valeurs epsilon spécifiées pour les comparaisons d’égalité.

Syntaxe

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
);

Paramètres

pMesh [in]

Type : LPD3DXMESH

Pointeur vers un objet ID3DXMesh , le maillage à partir duquel souder les sommets.

Indicateurs [in]

Type : DWORD

Combinaison d’un ou plusieurs indicateurs de D3DXWELDEPSILONSFLAGS.

pEpsilons [in]

Type : const D3DXWeldEpsilons*

Pointeur vers une structure D3DXWeldEpsilons , spécifiant les valeurs epsilon à utiliser pour cette méthode. Utilisez NULL pour initialiser tous les membres de la structure à une valeur par défaut de 1,0e-6f.

pAdjacencyIn [in]

Type : const DWORD*

Pointeur vers un tableau de trois DWORD par visage qui spécifient les trois voisins pour chaque visage dans le maillage source. Si le bord n’a pas de faces adjacentes, la valeur est 0xffffffff. Si ce paramètre est défini sur NULL, ID3DXBaseMesh::GenerateAdjacency sera appelé pour créer des informations d’adjacency logiques.

pAdjacencyOut [in, out]

Type : DWORD*

Pointeur vers un tableau de trois DWORD par visage qui spécifient les trois voisins pour chaque visage dans le maillage optimisé. Si le bord n’a pas de faces adjacentes, la valeur est 0xffffffff.

pFaceRemap [out]

Type : DWORD*

Tableau de DWORD, un par face, qui identifie la face de maillage d’origine qui correspond à chaque face dans le maillage soudé.

ppVertexRemap [out]

Type : LPD3DXBUFFER*

Adresse d’un pointeur vers une interface ID3DXBuffer , qui contient un DWORD pour chaque vertex qui spécifie la façon dont les nouveaux sommets sont mappés aux anciens sommets. Ce remappage est utile si vous devez modifier des données externes en fonction du nouveau mappage de vertex.

Valeur retournée

Type : HRESULT

Si la fonction réussit, la valeur de retour est D3D_OK. Si la fonction échoue, la valeur de retour peut être l’une des suivantes : D3DERR_INVALIDCALL, E_OUTOFMEMORY.

Notes

Cette fonction utilise les informations d’adjacence fournies pour déterminer les points répliqués. Les sommets sont fusionnés en fonction d’une comparaison d’epsilon. Les sommets à position égale doivent déjà avoir été calculés et représentés par des données représentatives de points.

Cette fonction combine des sommets logiquement soudés qui ont des composants similaires, tels que des normales ou des coordonnées de texture dans pEpsilons.

L’exemple de code suivant appelle cette fonction avec le soudage activé. Les sommets sont comparés à l’aide de valeurs epsilon pour la position de vecteur et de vertex normale. Un pointeur est retourné à un tableau de remapping de visage (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

Spécifications

Condition requise Valeur
En-tête
D3DX9Mesh.h
Bibliothèque
D3dx9.lib

Voir aussi

Fonctions de maillage