D3DXWeldVertices fonction)
Les soudures ensemble des vertex répliqués ayant des attributs identiques. 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 [ dans]
-
Type : LPD3DXMESH
Pointeur vers un objet ID3DXMesh , le maillage à partir duquel les vertex de soudure.
-
Indicateurs [ dans]
-
Type : DWORD
Combinaison d’un ou plusieurs indicateurs à partir de D3DXWELDEPSILONSFLAGS.
-
pEpsilons [ dans]
-
Type : const D3DXWeldEpsilons *
Pointeur vers une structure D3DXWeldEpsilons , en spécifiant les valeurs epsilon à utiliser pour cette méthode. Utilisez null pour initialiser tous les membres de la structure avec une valeur par défaut de 1,0 e-6F.
-
pAdjacencyIn [ dans]
-
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 a la valeur null, ID3DXBaseMesh :: GenerateAdjacency est appelé pour créer des informations d’adjacence 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 [ à]
-
Type : DWORD*
Tableau de DWORDs, un par visage, qui identifie la face d’origine du maillage qui correspond à chaque visage dans le maillage soudé.
-
ppVertexRemap [ à]
-
Type : LPD3DXBUFFER*
Adresse d’un pointeur vers une interface ID3DXBuffer , qui contient une valeur DWORD pour chaque vertex qui spécifie la façon dont les nouveaux vertex sont mappés aux anciens vertex. 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 est réussie, 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.
Remarques
Cette fonction utilise les informations d’adjacence fournies pour déterminer les points répliqués. Les vertex sont fusionnés en fonction d’une comparaison Epsilon. Les vertex avec la même position doivent déjà avoir été calculés et représentés par des données représentatives du point.
Cette fonction combine des vertex soudés logiquement 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 vertex sont comparés à l’aide des valeurs epsilon pour le vecteur normal et la position du vertex. Un pointeur est retourné à un tableau de remappages de visages (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
Configuration requise
| Condition requise | Valeur |
|---|---|
| En-tête |
|
| Bibliothèque |
|