D3DXQuaternionSquadSetup-Funktion (D3dx9math.h)

Richtet Steuerungspunkte für die sphärische Quadrangleinterpolation ein.

Syntax

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
);

Parameter

pAOut [ out]

Typ: D3DXQUATERNION*

Zeiger auf AOut.

pBOut [ out]

Typ: D3DXQUATERNION*

Zeiger auf BOut.

pCOut [ out]

Typ: D3DXQUATERNION*

Zeiger auf COut.

pQ0 [ In]

Typ: const D3DXQUATERNION *

Zeiger auf den Eingabesteuerpunkt Q0.

pQ1 [ In]

Typ: const D3DXQUATERNION *

Zeiger auf den Eingabesteuerpunkt Q1.

pQ2 [ In]

Typ: const D3DXQUATERNION *

Zeiger auf den Eingabesteuerungspunkt Q2.

pQ3 [ In]

Typ: const D3DXQUATERNION *

Zeiger auf den Eingabesteuerungspunkt Q3.

Rückgabewert

Keine.

Bemerkungen

Diese Funktion nimmt vier Kontrollpunkte an, die für die Eingaben pQ0, pQ1, pQ2 und pQ3 bereitgestellt werden. Die Funktion ändert dann diese Werte, um eine Kurve zu finden, die entlang des kürzesten Pfads fließt. Die Werte für q0, q2 und q3 werden wie unten dargestellt berechnet.

q0 = |Q0 + Q1| < |Q0 - Q1| ? -Q0 : Q0
q2 = |Q1 + Q2| < |Q1 - Q2| ? -Q2 : Q2
q3 = |Q2 + Q3| < |Q2 - Q3| ? -Q3 : Q3

Nachdem die neuen Q-Werte berechnet wurden, werden die Werte für AOut, BOut und COut wie folgt berechnet:

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

Hinweis

Ln ist die API-Methode D3DXQuaternionLn, und Exp ist die API-Methode D3DXQuaternionExp.

Verwenden Sie D3DXQuaternionNormalize für alle Quaternioneingaben, die noch nicht normalisiert sind.

Beispiele

Das folgende Beispiel zeigt, wie Sie einen Satz von Quaternionsschlüsseln (Q0, Q1, Q2, Q3) verwenden, um die inneren Quadranglepunkte (A, B, C) zu berechnen. Dadurch wird sichergestellt, dass die Tangenten über angrenzende Segmente hinweg kontinuierlich sind.

      A     B
Q0    Q1    Q2    Q3

Im folgenden Codebeispiel wird veranschaulicht, wie Sie zwischen Q1 und Q2 interpolieren können.

// 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);

Hinweis

  • C ist abhängig vom Ergebnis der Funktion +/- Q2.
  • Qt ist das Ergebnis der Funktion.

Das Ergebnis ist eine Drehung um 45 Grad um die Z-Achse für die Zeit = 0,5.

Anforderungen

Anforderungen Wert
Header
D3dx9math.h
Bibliothek
D3dx9.lib

Weitere Informationen

Mathematische Funktionen

D3DXQuaternionSquad