Partilhar via


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
D3dx9math.h
Biblioteca
D3dx9.lib

Confira também

Funções Matemáticas

D3DXQuaternionSquad