D3DXWeldVertices fonction)

Les soudures ensemble des vertex répliqués ayant des attributs identiques. 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 [ dans]

Type : LPD3DXMESH

Pointeur vers un objet ID3DXMesh , le maillage à partir duquel les vertex de soudure.

Indicateurs [ dans]

Type : DWORD

Combinaison d’un ou plusieurs indicateurs à partir de D3DXWELDEPSILONSFLAGS.

pEpsilons [ dans]

Type : const D3DXWeldEpsilons *

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

pAdjacencyIn [ dans]

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 a la valeur null, ID3DXBaseMesh :: GenerateAdjacency est appelé pour créer des informations d’adjacence 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 [ à]

Type : DWORD*

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

ppVertexRemap [ à]

Type : LPD3DXBUFFER*

Adresse d’un pointeur vers une interface ID3DXBuffer , qui contient une valeur DWORD pour chaque vertex qui spécifie la façon dont les nouveaux vertex sont mappés aux anciens vertex. 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 est réussie, 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.

Remarques

Cette fonction utilise les informations d’adjacence fournies pour déterminer les points répliqués. Les vertex sont fusionnés en fonction d’une comparaison Epsilon. Les vertex avec la même position doivent déjà avoir été calculés et représentés par des données représentatives du point.

Cette fonction combine des vertex soudés logiquement 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 vertex sont comparés à l’aide des valeurs epsilon pour le vecteur normal et la position du vertex. Un pointeur est retourné à un tableau de remappages de visages (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

Configuration requise

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

Voir aussi

Fonctions de maillage