D3DXComputeTangentFrameEx, fonction

Effectue des calculs de trame tangente sur un maillage. Des vecteurs tangentes, binormals et éventuellement normaux sont générés. Les singularités sont gérées selon les besoins en regroupant les arêtes et en fractionnant les sommets.

Syntaxe

HRESULT D3DXComputeTangentFrameEx(
  _In_        ID3DXMesh   *pMesh,
  _In_        DWORD       dwTextureInSemantic,
  _In_        DWORD       dwTextureInIndex,
  _In_        DWORD       dwUPartialOutSemantic,
  _In_        DWORD       dwUPartialOutIndex,
  _In_        DWORD       dwVPartialOutSemantic,
  _In_        DWORD       dwVPartialOutIndex,
  _In_        DWORD       dwNormalOutSemantic,
  _In_        DWORD       dwNormalOutIndex,
  _In_        DWORD       dwOptions,
  _In_  const DWORD       *pdwAdjacency,
  _In_        FLOAT       fPartialEdgeThreshold,
  _In_        FLOAT       fSingularPointThreshold,
  _In_        FLOAT       fNormalEdgeThreshold,
  _Out_       ID3DXMesh   **ppMeshOut,
  _Out_       ID3DXBuffer **ppVertexMapping
);

Paramètres

pMesh [in]

Type : ID3DXMesh*

Pointeur vers un objet de maillage ID3DXMesh d’entrée.

dwTextureInSemantic [in]

Type : DWORD

Spécifie la sémantique d’entrée de coordonnées de texture. Si D3DX_DEFAULT, la fonction suppose qu’il n’y a pas de coordonnées de texture, et la fonction échouera, sauf si le calcul de vecteur normal est spécifié.

dwTextureIndex [in]

Type : DWORD

Si un maillage a plusieurs coordonnées de texture, spécifie la coordonnée de texture à utiliser pour les calculs de trame tangente. Si zéro, le maillage n’a qu’une seule coordonnée de texture.

dwUPartialOutSemantic [in]

Type : DWORD

Spécifie la sémantique de sortie pour le type, généralement D3DDECLUSAGE_TANGENT, qui décrit l’emplacement de stockage de la dérivée partielle par rapport à la coordonnée de texture U. Si D3DX_DEFAULT, cette dérivée partielle n’est pas stockée.

dwUPartialOutIndex [in]

Type : DWORD

Spécifie l’index sémantique au niveau duquel stocker la dérivée partielle par rapport à la coordonnée de texture U.

dwVPartialOutSemantic [in]

Type : DWORD

Spécifie le type D3DDECLUSAGE , généralement D3DDECLUSAGE_BINORMAL, qui décrit l’emplacement de stockage de la dérivée partielle par rapport à la coordonnée de texture V. Si D3DX_DEFAULT, cette dérivée partielle n’est pas stockée.

dwVPartialOutIndex [in]

Type : DWORD

Spécifie l’index sémantique au niveau duquel stocker la dérivée partielle par rapport à la coordonnée de texture V.

dwNormalOutSemantic [in]

Type : DWORD

Spécifie la sémantique normale de sortie, généralement D3DDECLUSAGE_NORMAL, qui décrit l’emplacement où le vecteur normal à chaque sommet sera stocké. Si D3DX_DEFAULT, ce vecteur normal n’est pas stocké.

dwNormalOutIndex [in]

Type : DWORD

Spécifie l’index sémantique auquel stocker le vecteur normal à chaque sommet.

dwOptions [in]

Type : DWORD

Combinaison d’un ou de plusieurs indicateurs D3DXTANGENT qui spécifient des options de calcul de trame tangente. Si la valeur est NULL, les options suivantes sont spécifiées :

Description D3DXTANGENT Valeur de l’indicateur
Pondérer la longueur normale du vecteur par l’angle, en radians, sous-tené par les deux bords sortant du sommet. & ! ( D3DXTANGENT_WEIGHT_BY_AREA | D3DXTANGENT_WEIGHT_EQUAL )
Calculez les coordonnées cartésiennes orthogonales à partir de coordonnées de texture (u, v). Consultez la section Notes. & ! ( D3DXTANGENT_ORTHOGONALIZE_FROM_U | D3DXTANGENT_ORTHOGONALIZE_FROM_V )
Les textures ne sont pas encapsulées dans des directions u ou v & ! ( D3DXTANGENT_WRAP_UV )
Les dérivées partielles relatives aux coordonnées de texture sont normalisées. & ! ( D3DXTANGENT_DONT_NORMALIZE_PARTIALS )
Les sommets sont classés dans le sens inverse des aiguilles d’une montre autour de chaque triangle. & ! ( D3DXTANGENT_WIND_CW )
Utilisez des vecteurs normaux par vertex déjà présents dans le maillage d’entrée. & ! ( D3DXTANGENT_CALCULATE_NORMALS )

 

Si D3DXTANGENT_GENERATE_IN_PLACE n’est pas défini, le maillage d’entrée est cloné. Le maillage d’origine doit donc avoir suffisamment d’espace pour stocker le vecteur normal calculé et les données dérivées partielles.

pdwAdjacency [in]

Type : const DWORD*

Pointeur vers un tableau de trois DWORD par visage qui spécifient les trois voisins pour chaque face dans le maillage. Le nombre d’octets dans ce tableau doit être d’au moins 3 * GetNumFaces * sizeof(DWORD).

fPartialEdgeThreshold [in]

Type : FLOAT

Spécifie le cosinus maximal de l’angle auquel deux dérivées partielles sont considérées comme incompatibles l’une avec l’autre. Si le produit de point de la direction des deux dérivées partielles dans les triangles adjacents est inférieur ou égal à ce seuil, les sommets partagés entre ces triangles seront fractionnés.

fSingularPointThreshold [in]

Type : FLOAT

Spécifie la magnitude maximale d’une dérivée partielle à laquelle un sommet sera considéré comme singulier. Comme plusieurs triangles sont incidents sur un point qui ont des trames tangentes à proximité, mais qui s’annulent complètement les uns les autres (par exemple au sommet d’une sphère), l’ampleur de la dérivée partielle diminue. Si la magnitude est inférieure ou égale à ce seuil, le vertex est fractionné pour chaque triangle qui le contient.

fNormalEdgeThreshold [in]

Type : FLOAT

À l’instar de fPartialEdgeThreshold, spécifie le cosinus maximal de l’angle entre deux normales, qui est un seuil au-delà duquel les sommets partagés entre les triangles seront fractionnés. Si le produit de points des deux normales est inférieur au seuil, les sommets partagés sont fractionnés, formant un bord dur entre les triangles voisins. Si le produit de point est supérieur au seuil, les normales des triangles voisins sont interpolées.

ppMeshOut [out]

Type : ID3DXMesh**

Adresse d’un pointeur vers un objet de maillage ID3DXMesh de sortie qui reçoit les données tangentes, binormales et vectorielles normales calculées.

ppVertexMapping [out]

Type : ID3DXBuffer**

Adresse d’un pointeur vers un objet de mémoire tampon ID3DXBuffer de sortie qui reçoit un mappage des nouveaux sommets calculés par cette méthode avec les sommets d’origine. La mémoire tampon est un tableau de DWORD, dont la taille de tableau est définie comme le nombre de sommets dans ppMeshOut.

Valeur retournée

Type : HRESULT

Si la fonction réussit, la valeur de retour est S_OK. Si la fonction échoue, la valeur de retour peut être l’une des suivantes : D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

Notes

Une version simplifiée de cette fonction est disponible en tant que D3DXComputeTangentFrame.

Le vecteur normal calculé à chaque sommet est toujours normalisé pour avoir une longueur d’unité.

La solution la plus robuste pour le calcul des coordonnées cartésiennes orthogonales consiste à ne pas définir d’indicateurs D3DXTANGENT_ORTHOGONALIZE_FROM_U et D3DXTANGENT_ORTHOGONALIZE_FROM_V, afin que les coordonnées orthogonales soient calculées à partir des coordonnées de texture you et v. Toutefois, dans ce cas, si u ou v est égal à zéro, la fonction calcule les coordonnées orthogonales à l’aide de D3DXTANGENT_ORTHOGONALIZE_FROM_V ou de D3DXTANGENT_ORTHOGONALIZE_FROM_U, respectivement.

Spécifications

Condition requise Valeur
En-tête
D3DX9Mesh.h
Bibliothèque
D3dx9.lib

Voir aussi

Fonctions de maillage

D3DXComputeTangentFrame