Fonction D3DXQuaternionSquadSetup (D3dx9math.h)
Notes
La bibliothèque d’utilitaireS D3DX est déconseillée. Nous vous recommandons d’utiliser DirectXMath à la place.
Configure des points de contrôle pour l’interpolation quadrangle sphérique.
Syntaxe
void D3DXQuaternionSquadSetup(
_Out_ D3DXQUATERNION *pAOut,
_Out_ D3DXQUATERNION *pBOut,
_Out_ D3DXQUATERNION *pCOut,
_In_ const D3DXQUATERNION *pQ0,
_In_ const D3DXQUATERNION *pQ1,
_In_ const D3DXQUATERNION *pQ2,
_In_ const D3DXQUATERNION *pQ3
);
Paramètres
-
pAOut [out]
-
Type : D3DXQUATERNION*
Pointeur vers AOut.
-
pBOut [out]
-
Type : D3DXQUATERNION*
Pointeur vers BOut.
-
pCOut [out]
-
Type : D3DXQUATERNION*
Pointeur vers COut.
-
pQ0 [in]
-
Type : const D3DXQUATERNION*
Pointeur vers le point de contrôle d’entrée, Q0.
-
pQ1 [in]
-
Type : const D3DXQUATERNION*
Pointeur vers le point de contrôle d’entrée, Q1.
-
pQ2 [in]
-
Type : const D3DXQUATERNION*
Pointeur vers le point de contrôle d’entrée, Q2.
-
pQ3 [in]
-
Type : const D3DXQUATERNION*
Pointeur vers le point de contrôle d’entrée, Q3.
Valeur retournée
Aucun.
Notes
Cette fonction prend quatre points de contrôle, qui sont fournis aux entrées pQ0, pQ1, pQ2 et pQ3. La fonction modifie ensuite ces valeurs pour trouver une courbe qui s’écoule le long du chemin le plus court. Les valeurs de q0, q2 et q3 sont calculées comme indiqué ci-dessous.
q0 = |Q0 + Q1| < |Q0 - Q1| ? -Q0 : Q0
q2 = |Q1 + Q2| < |Q1 - Q2| ? -Q2 : Q2
q3 = |Q2 + Q3| < |Q2 - Q3| ? -Q3 : Q3
Après avoir calculé les nouvelles valeurs Q, les valeurs pour AOut, BOut et COut sont calculées comme suit :
AOut = q1 * e[-0.25\ *(\ Ln[Exp(q1)*q2]\ +\ Ln[Exp(q1)*q0]\ )\ ]
BOut = q2 * e[-0.25\ *(\ Ln[Exp(q2)*q3]\ +\ Ln[Exp(q2)*q1]\ )\ ]
COut = q2
Notes
Ln est la méthode d’API D3DXQuaternionLn et Exp est la méthode d’API D3DXQuaternionExp.
Utilisez D3DXQuaternionNormalize pour toute entrée de quaternion qui n’est pas déjà normalisée.
Exemples
L’exemple suivant montre comment utiliser un ensemble de clés de quaternion (Q0, Q1, Q2, Q3) pour calculer les points quadrangle internes (A, B, C). Cela garantit que les tangentes sont continues sur les segments adjacents.
A B
Q0 Q1 Q2 Q3
L’exemple de code suivant montre comment interpoler entre Q1 et Q2.
// Rotation about the z-axis
D3DXQUATERNION Q0 = D3DXQUATERNION(0, 0, 0.707f, -.707f);
D3DXQUATERNION Q1 = D3DXQUATERNION(0, 0, 0.000f, 1.000f);
D3DXQUATERNION Q2 = D3DXQUATERNION(0, 0, 0.707f, 0.707f);
D3DXQUATERNION Q3 = D3DXQUATERNION(0, 0, 1.000f, 0.000f);
D3DXQUATERNION A, B, C, Qt;
FLOAT time = 0.5f;
D3DXQuaternionSquadSetup(&A, &B, &C, &Q0, &Q1, &Q2, &Q3);
D3DXQuaternionSquad(&Qt, &Q1, &A, &B, &C, time);
Notes
- C est +/- Q2 en fonction du résultat de la fonction.
- Qt est le résultat de la fonction .
Le résultat est une rotation de 45 degrés autour de l’axe z pour le temps = 0,5.
Spécifications
Condition requise | Valeur |
---|---|
En-tête |
|
Bibliothèque |
|
Voir aussi