Compartir a través de


Función D3DXWeldVertices

Solda juntos vértices replicados que tienen atributos iguales. Este método usa valores epsilon especificados para comparaciones de igualdad.

Sintaxis

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

Puntero a un objeto ID3DXMesh , la malla de la que se van a soldar vértices.

Marcas [in]

Tipo: DWORD

Combinación de una o varias marcas de D3DXWELDEPSILONSFLAGS.

pEpsilons [in]

Tipo: const D3DXWeldEpsilons*

Puntero a una estructura D3DXWeldEpsilons , especificando los valores epsilon que se usarán para este método. Use NULL para inicializar todos los miembros de estructura en un valor predeterminado de 1.0e-6f.

pAdjacencyIn [in]

Tipo: const DWORD*

Puntero a una matriz de tres DWORD por cara que especifican los tres vecinos para cada cara de la malla de origen. Si el borde no tiene caras adyacentes, el valor es 0xffffffff. Si este parámetro se establece en NULL, se llamará a ID3DXBaseMesh::GenerateAdjacency para crear información de adyacencia lógica.

pAdjacencyOut [in, out]

Tipo: DWORD*

Puntero a una matriz de tres DWORD por cara que especifican los tres vecinos para cada cara de la malla optimizada. Si el borde no tiene caras adyacentes, el valor es 0xffffffff.

pFaceRemap [out]

Tipo: DWORD*

Matriz de DWORDs, una por cara, que identifica la cara de malla original que corresponde a cada cara de la malla soldada.

ppVertexRemap [out]

Tipo: LPD3DXBUFFER*

Dirección de un puntero a una interfaz ID3DXBuffer , que contiene un DWORD para cada vértice que especifica cómo se asignan los nuevos vértices a los vértices antiguos. Este mapa es útil si necesita modificar los datos externos en función de la nueva asignación de vértices.

Valor devuelto

Tipo: HRESULT

Si la función se realiza correctamente, el valor devuelto se D3D_OK. Si se produce un error en la función, el valor devuelto puede ser uno de los siguientes: D3DERR_INVALIDCALL, E_OUTOFMEMORY.

Comentarios

Esta función usa información de adyacencia proporcionada para determinar los puntos que se replican. Los vértices se combinan en función de una comparación de epsilon. Los vértices con la misma posición ya deben haberse calculado y representado por datos representativos de punto.

Esta función combina vértices soldados lógicamente que tienen componentes similares, como normales o coordenadas de textura dentro de pEpsilons.

El código de ejemplo siguiente llama a esta función con soldadura habilitada. Los vértices se comparan mediante valores epsilon para el vector normal y la posición del vértice. Se devuelve un puntero a una matriz de reasignación de caras (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 Value
Encabezado
D3DX9Mesh.h
Biblioteca
D3dx9.lib

Consulte también

Funciones de malla