Поделиться через


Функция D3DXQuaternionSquadSetup (D3dx9math.h)

Примечание

Служебная библиотека D3DX устарела. Вместо этого рекомендуется использовать DirectXMath .

Настраивает контрольные точки для интерполяции сферических четырехугольника.

Синтаксис

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

Параметры

pAOut [out]

Тип: D3DXQUATERNION*

Указатель на AOut.

pBOut [out]

Тип: D3DXQUATERNION*

Указатель на BOut.

pCOut [out]

Тип: D3DXQUATERNION*

Указатель на COut.

pQ0 [in]

Тип: const D3DXQUATERNION*

Указатель на контрольную точку ввода Q0.

pQ1 [in]

Тип: const D3DXQUATERNION*

Указатель на контрольную точку ввода Q1.

pQ2 [in]

Тип: const D3DXQUATERNION*

Указатель на контрольную точку ввода, Q2.

pQ3 [in]

Тип: const D3DXQUATERNION*

Указатель на контрольную точку ввода Q3.

Возвращаемое значение

Нет.

Remarks

Эта функция принимает четыре контрольные точки, которые передаются на входные данные pQ0, pQ1, pQ2 и pQ3. Затем функция изменяет эти значения, чтобы найти кривую, которая проходит по кратчайшему пути. Значения q0, q2 и q3 вычисляются, как показано ниже.

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

После вычисления новых значений Q значения AOut, BOut и COut вычисляются следующим образом:

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

Примечание

Ln — это метод API D3DXQuaternionLn , а Exp — метод API D3DXQuaternionExp.

 

Используйте D3DXQuaternionNormalize для любых входных данных кватерниона, которые еще не нормализованы.

Примеры

В следующем примере показано, как использовать набор ключей кватерниона (Q0, Q1, Q2, Q3) для вычисления внутренних точек четырехугольника (A, B, C). Это гарантирует, что тангенсы будут непрерывными в смежных сегментах.

      A     B
Q0    Q1    Q2    Q3

В следующем примере кода показано, как выполнить интерполяцию между Q1 и 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);

Примечание

  • C имеет значение +/- Q2 в зависимости от результата выполнения функции.
  • Qt является результатом функции .

Результатом является поворот на 45 градусов вокруг оси Z для времени = 0,5.

 

Требования

Требование Значение
Заголовок
D3dx9math.h
Библиотека
D3dx9.lib

См. также раздел

Математические функции

D3DXQuaternionSquad