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 |
|
Biblioteca |
|
Confira também