Векторы, вершины и кватернионы (Direct3D 9)
В Direct3D вершины описывают положение и ориентацию. Каждая вершина в примитиве описывается вектором, который сообщает ее положение, цвет, координаты текстуры, и вектором нормали, который позволяет узнать ее ориентацию.
Кватернионы добавляют четвертый элемент к значениям [x, y, z], которые определяют трехкомпонентный вектор. Кватернионы представляют собой альтернативу матричным методам, обычно используемым для 3D-вращения. Кватернион представляет ось в 3D-пространстве и поворот вокруг этой оси. Например, кватернион может представлять ось (1,1,2) и поворот на 1 радиан. Кватернионы содержат полезную информацию, однако их истинная ценность заключается в двух операциях, которые можно выполнять над ними: композиции и интерполяции.
Выполнение композиции над кватернионами аналогично их объединению. Записывается композиция двух кватернионов так, как показано на следующем рисунке.
Композиция двух кватернионов, примененных к геометрии, означает "повернуть геометрию вокруг оси путем поворота, а затем повернуть ее вокруг оси' путем поворота₁". В этом случае Q представляет поворот вокруг одной оси, который является результатом применения q₁ к геометрии.
С помощью интерполяции кватернионов приложение может рассчитать плавный и рациональный путь от одной оси и ориентации к другой. Таким образом, интерполяция между q₁ и q₂ — это простой способ анимировать движение от одной ориентации к другой.
При совместном использовании композиция и интерполяция дают возможность без труда манипулировать геометрией так, что манипуляции будут казаться сложными. Например, предположим, что у вас есть геометрия, которую вы хотите повернуть для придания ей определенной ориентации. Вам известно, что нужно повернуть ее на r₂ градусов вокруг оси₂, а затем на r₁ градусов вокруг оси₁, однако окончательный кватернион вам не известен. Используя композицию, вы можете объединить два поворота применительно к геометрии и получить один кватернион, который будет представлять собой результат. Затем можно выполнить интерполяцию из исходного кватерниона в составной для получения плавного перехода от одного к другому.
Служебная библиотека D3DX содержит функции, помогающие работать с кватернионами. Например, функция D3DXQuaternionRotationAxis добавляет значение поворота в вектор, определяющий ось вращения, и возвращает результат в кватернионе, определенном структурой D3DXQUATERNION . Кроме того, функция D3DXQuaternionMultiply состоит из кватернионов, а D3DXQuaternionSlerp выполняет сферическую линейную интерполяцию между двумя кватернионами.
Приложения Direct3D могут использовать следующие функции для упрощения работы с кватернионами.
- D3DXQuaternionBaryCentric
- D3DXQuaternionConjugate
- D3DXQuaternionDot
- D3DXQuaternionExp
- D3DXQuaternionIdentity
- D3DXQuaternionInverse
- D3DXQuaternionIsIdentity
- D3DXQuaternionLength
- D3DXQuaternionLengthSq
- D3DXQuaternionLn
- D3DXQuaternionMultiply
- D3DXQuaternionNormalize
- D3DXQuaternionRotationAxis
- D3DXQuaternionRotationMatrix
- D3DXQuaternionRotationYawPitchRoll
- D3DXQuaternionSlerp
- D3DXQuaternionSquad
- D3DXQuaternionToAxisAngle
Приложения Direct3D могут использовать следующие функции для упрощения работы с тремя компонентными векторами.
- D3DXVec3Add
- D3DXVec3BaryCentric
- D3DXVec3CatmullRom
- D3DXVec3Cross
- D3DXVec3Dot
- D3DXVec3Hermite
- D3DXVec3Length
- D3DXVec3LengthSq
- D3DXVec3Lerp
- D3DXVec3Maximize
- D3DXVec3Minimize
- D3DXVec3Normalize
- D3DXVec3Project
- D3DXVec3Scale
- D3DXVec3Subtract
- D3DXVec3Transform
- D3DXVec3TransformCoord
- D3DXVec3TransformNormal
- D3DXVec3Проект
Многие дополнительные функции, упрощающие задачи с помощью двух- и четырехкомпонентных векторов, входят в число математических функций , предоставляемых служебной библиотекой D3DX.
Связанные темы