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 |
|
Biblioteca |
|
Consulte también