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 |
|
| Bibliothek |
|