Função D3DXQuaternionSquadSetup (D3dx9math.h)
Observação
A biblioteca do utilitário D3DX foi preterida. Em vez disso, recomendamos que você use DirectXMath .
Configura pontos de controle para interpolação de quadrângulo esférico.
Sintaxe
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
);
Parâmetros
-
pAOut [out]
-
Tipo: D3DXQUATERNION*
Ponteiro para AOut.
-
pBOut [out]
-
Tipo: D3DXQUATERNION*
Ponteiro para BOut.
-
pCOut [out]
-
Tipo: D3DXQUATERNION*
Ponteiro para COut.
-
pQ0 [in]
-
Tipo: const D3DXQUATERNION*
Ponteiro para o ponto de controle de entrada, Q0.
-
pQ1 [in]
-
Tipo: const D3DXQUATERNION*
Ponteiro para o ponto de controle de entrada, Q1.
-
pQ2 [in]
-
Tipo: const D3DXQUATERNION*
Ponteiro para o ponto de controle de entrada, Q2.
-
pQ3 [in]
-
Tipo: const D3DXQUATERNION*
Ponteiro para o ponto de controle de entrada, Q3.
Valor retornado
Nenhum.
Comentários
Essa função usa quatro pontos de controle, que são fornecidos para as entradas pQ0, pQ1, pQ2 e pQ3. Em seguida, a função altera esses valores para encontrar uma curva que flui ao longo do caminho mais curto. Os valores de q0, q2 e q3 são calculados conforme mostrado abaixo.
q0 = |Q0 + Q1| < |Q0 - Q1| ? -Q0 : Q0
q2 = |Q1 + Q2| < |Q1 - Q2| ? -Q2 : Q2
q3 = |Q2 + Q3| < |Q2 - Q3| ? -Q3 : Q3
Tendo calculado os novos valores Q, os valores de AOut, BOut e COut são calculados da seguinte maneira:
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
Observação
Ln é o método de API D3DXQuaternionLn e Exp é o método de API D3DXQuaternionExp.
Use D3DXQuaternionNormalize para qualquer entrada de quatérnion que ainda não esteja normalizada.
Exemplos
O exemplo a seguir mostra como usar um conjunto de chaves de quatérnion (Q0, Q1, Q2, Q3) para calcular os pontos de quadrângulo interno (A, B, C). Isso garante que as tangentes sejam contínuas entre segmentos adjacentes.
A B
Q0 Q1 Q2 Q3
O exemplo de código a seguir demonstra como você pode interpolar entre o 1º e o 2º trimestre.
// 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);
Observação
- C é +/- Q2 dependendo do resultado da função.
- Qt é o resultado da função.
O resultado é uma rotação de 45 graus ao redor do eixo z para o tempo = 0,5.
Requisitos
Requisito | Valor |
---|---|
parâmetro |
|
Biblioteca |
|
Confira também