Fonction D3DXWeldVertices
Soude les sommets répliqués qui ont des attributs égaux. 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 [in]
-
Type : LPD3DXMESH
Pointeur vers un objet ID3DXMesh , le maillage à partir duquel souder les sommets.
-
Indicateurs [in]
-
Type : DWORD
Combinaison d’un ou plusieurs indicateurs de D3DXWELDEPSILONSFLAGS.
-
pEpsilons [in]
-
Type : const D3DXWeldEpsilons*
Pointeur vers une structure D3DXWeldEpsilons , spécifiant les valeurs epsilon à utiliser pour cette méthode. Utilisez NULL pour initialiser tous les membres de la structure à une valeur par défaut de 1,0e-6f.
-
pAdjacencyIn [in]
-
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 est défini sur NULL, ID3DXBaseMesh::GenerateAdjacency sera appelé pour créer des informations d’adjacency 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 [out]
-
Type : DWORD*
Tableau de DWORD, un par face, qui identifie la face de maillage d’origine qui correspond à chaque face dans le maillage soudé.
-
ppVertexRemap [out]
-
Type : LPD3DXBUFFER*
Adresse d’un pointeur vers une interface ID3DXBuffer , qui contient un DWORD pour chaque vertex qui spécifie la façon dont les nouveaux sommets sont mappés aux anciens sommets. 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 réussit, 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.
Notes
Cette fonction utilise les informations d’adjacence fournies pour déterminer les points répliqués. Les sommets sont fusionnés en fonction d’une comparaison d’epsilon. Les sommets à position égale doivent déjà avoir été calculés et représentés par des données représentatives de points.
Cette fonction combine des sommets logiquement soudés 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 sommets sont comparés à l’aide de valeurs epsilon pour la position de vecteur et de vertex normale. Un pointeur est retourné à un tableau de remapping de visage (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
Spécifications
Condition requise | Valeur |
---|---|
En-tête |
|
Bibliothèque |
|
Voir aussi