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 |
|
Bibliothèque |
|
Voir aussi