Função D3DXQuaternionSquadSetup (D3DX10Math.h)

Observação

A biblioteca de utilitários D3DX10 foi preterida. Recomendamos que você use DirectXMath em vez disso.

Configura pontos de controle para interpolação de quadrilátero esférico.

Sintaxe

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

Parâmetros

pAOut [in]

Tipo: D3DXQUATERNION*

Ponteiro para AOut.

pBOut [in]

Tipo: D3DXQUATERNION*

Ponteiro para BOut.

pCOut [in]

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.

Retornar valor

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érnio que ainda não esteja normalizada.

Exemplos

O exemplo a seguir mostra como usar um conjunto de chaves de quatérnio (Q0, Q1, Q2, Q3) para calcular os pontos de quadrangulo 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 Q1 e o 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);

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
D3DX10Math.h
Biblioteca
D3DX10.lib

Confira também

Funções matemáticas