D3DXQuaternionSquadSetup-Funktion (D3DX10Math.h)

Hinweis

Die D3DX10-Hilfsprogrammbibliothek ist veraltet. Es wird empfohlen, stattdessen DirectXMath zu verwenden.

Richtet Kontrollpunkte für die sphärische viereckige Interpolation ein.

Syntax

void D3DXQuaternionSquadSetup(
  _In_       D3DXQUATERNION *pAOut,
  _In_       D3DXQUATERNION *pBOut,
  _In_       D3DXQUATERNION *pCOut,
  _In_ const D3DXQUATERNION *pQ0,
  _In_ const D3DXQUATERNION *pQ1,
  _In_ const D3DXQUATERNION *pQ2,
  _In_ const D3DXQUATERNION *pQ3
);

Parameter

pAOut [in]

Typ: D3DXQUATERNION*

Zeiger auf AOut.

pBOut [in]

Typ: D3DXQUATERNION*

Zeiger auf BOut.

pCOut [in]

Typ: D3DXQUATERNION*

Zeiger auf COut.

pQ0 [in]

Typ: const D3DXQUATERNION*

Zeiger auf den Eingabesteuerungspunkt Q0.

pQ1 [in]

Typ: const D3DXQUATERNION*

Zeiger auf den Eingabesteuerungspunkt 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 akzeptiert vier Kontrollpunkte, 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 von 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 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 Viereckpunkte (A, B, C) zu berechnen. Dadurch wird sichergestellt, dass die Tangenten über benachbarte 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 +/- Q2, abhängig vom Ergebnis der Funktion.
  • Qt ist das Ergebnis der Funktion.

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

 

Anforderungen

Anforderung Wert
Header
D3DX10Math.h
Bibliothek
D3DX10.lib

Siehe auch

Mathematische Funktionen