Compartilhar via


Função D3DXWeldVertices

Solda juntos vértices replicados que têm atributos iguais. Esse método usa valores de epsilon especificados para comparações de igualdade.

Sintaxe

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

Parâmetros

pMesh [in]

Tipo: LPD3DXMESH

Ponteiro para um objeto ID3DXMesh , a malha da qual soldar vértices.

Sinalizadores [in]

Tipo: DWORD

Combinação de um ou mais sinalizadores de D3DXWELDEPSILONSFLAGS.

pEpsilons [in]

Tipo: const D3DXWeldEpsilons*

Ponteiro para uma estrutura D3DXWeldEpsilons , especificando os valores de epsilon a serem usados para esse método. Use NULL para inicializar todos os membros da estrutura com um valor padrão de 1.0e-6f.

pAdjacencyIn [in]

Tipo: const DWORD*

Ponteiro para uma matriz de três DWORDs por rosto que especificam os três vizinhos para cada rosto na malha de origem. Se a borda não tiver rostos adjacentes, o valor será 0xffffffff. Se esse parâmetro for definido como NULL, ID3DXBaseMesh::GenerateAdjacency será chamado para criar informações lógicas de adjacência.

pAdjacencyOut [in, out]

Tipo: DWORD*

Ponteiro para uma matriz de três DWORDs por rosto que especificam os três vizinhos para cada rosto na malha otimizada. Se a borda não tiver rostos adjacentes, o valor será 0xffffffff.

pFaceRemap [out]

Tipo: DWORD*

Uma matriz de DWORDs, uma por rosto, que identifica a face de malha original que corresponde a cada face na malha soldada.

ppVertexRemap [out]

Tipo: LPD3DXBUFFER*

Endereço de um ponteiro para uma interface ID3DXBuffer , que contém um DWORD para cada vértice que especifica como os novos vértices são mapeados para os vértices antigos. Esse remapeamento será útil se você precisar alterar dados externos com base no novo mapeamento de vértice.

Valor retornado

Tipo: HRESULT

Se a função for bem-sucedida, o valor retornado será D3D_OK. Se a função falhar, o valor retornado poderá ser um dos seguintes: D3DERR_INVALIDCALL, E_OUTOFMEMORY.

Comentários

Essa função usa informações de adjacência fornecidas para determinar os pontos que são replicados. Os vértices são mesclados com base em uma comparação de epsilon. Vértices com posição igual já devem ter sido calculados e representados por dados representativos de ponto.

Essa função combina vértices soldados logicamente que têm componentes semelhantes, como normais ou coordenadas de textura em pEpsilons.

O código de exemplo a seguir chama essa função com soldagem habilitada. Os vértices são comparados usando valores de epsilon para a posição normal do vetor e do vértice. Um ponteiro é retornado para uma matriz de remapeamento facial (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

Requisitos

Requisito Valor
parâmetro
D3DX9Mesh.h
Biblioteca
D3dx9.lib

Confira também

Funções de malha