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