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
D3dx9math.h
Bibliothèque
D3dx9.lib

Voir aussi

Fonctions mathématiques

D3DXQuaternionSquad