Funzione D3DXQuaternionSquadSetup (D3DX10Math.h)

Nota

La libreria di utilità D3DX10 è deprecata. È consigliabile usare invece DirectXMath .

Imposta i punti di controllo per l'interpolazione quadrale sferica.

Sintassi

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

Parametri

pAOut [in]

Tipo: D3DXQUATERNION*

Puntatore a AOut.

pBOut [in]

Tipo: D3DXQUATERNION*

Puntatore a BOut.

pCOut [in]

Tipo: D3DXQUATERNION*

Puntatore a COut.

pQ0 [in]

Tipo: const D3DXQUATERNION*

Puntatore al punto di controllo di input, Q0.

pQ1 [in]

Tipo: const D3DXQUATERNION*

Puntatore al punto di controllo di input, Q1.

pQ2 [in]

Tipo: const D3DXQUATERNION*

Puntatore al punto di controllo di input, Q2.

pQ3 [in]

Tipo: const D3DXQUATERNION*

Puntatore al punto di controllo di input, Q3.

Valore restituito

No.

Osservazioni

Questa funzione accetta quattro punti di controllo, forniti agli input pQ0, pQ1, pQ2 e pQ3. La funzione modifica quindi questi valori per trovare una curva che scorre lungo il percorso più breve. I valori di q0, q2 e q3 vengono calcolati come illustrato di seguito.

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

Dopo aver calcolato i nuovi valori Q, i valori per AOut, BOut e COut vengono calcolati come segue:

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

Nota

Ln è il metodo API D3DXQuaternionLn ed Exp è il metodo API D3DXQuaternionExp.

 

Usare D3DXQuaternionNormalize per qualsiasi input quaternione non già normalizzato.

Esempio

Nell'esempio seguente viene illustrato come usare un set di chiavi quaternione (Q0, Q1, Q2, Q3) per calcolare i punti quadrangle interni (A, B, C). Ciò garantisce che le tangenti siano continue tra segmenti adiacenti.

      A     B
Q0    Q1    Q2    Q3

Nell'esempio di codice seguente viene illustrato come eseguire l'interpolazione tra Q1 e 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);

Nota

  • C è +/- Q2 a seconda del risultato della funzione.
  • Qt è il risultato della funzione.

Il risultato è una rotazione di 45 gradi attorno all'asse z per time = 0,5.

 

Requisiti

Requisito Valore
Intestazione
D3DX10Math.h
Libreria
D3DX10.lib

Vedi anche

Funzioni matematiche