Векторы, вершины и кватернионы (Direct3D 9)

В Direct3D вершины описывают положение и ориентацию. Каждая вершина в примитиве описывается вектором, который сообщает ее положение, цвет, координаты текстуры, и вектором нормали, который позволяет узнать ее ориентацию.

Кватернионы добавляют четвертый элемент к значениям [x, y, z], которые определяют трехкомпонентный вектор. Кватернионы представляют собой альтернативу матричным методам, обычно используемым для 3D-вращения. Кватернион представляет ось в 3D-пространстве и поворот вокруг этой оси. Например, кватернион может представлять ось (1,1,2) и поворот на 1 радиан. Кватернионы содержат полезную информацию, однако их истинная ценность заключается в двух операциях, которые можно выполнять над ними: композиции и интерполяции.

Выполнение композиции над кватернионами аналогично их объединению. Записывается композиция двух кватернионов так, как показано на следующем рисунке.

иллюстрация записи кватернионов

Композиция двух кватернионов, примененных к геометрии, означает "повернуть геометрию вокруг оси путем поворота, а затем повернуть ее вокруг оси' путем поворота₁". В этом случае Q представляет поворот вокруг одной оси, который является результатом применения q₁ к геометрии.

С помощью интерполяции кватернионов приложение может рассчитать плавный и рациональный путь от одной оси и ориентации к другой. Таким образом, интерполяция между q₁ и q₂ — это простой способ анимировать движение от одной ориентации к другой.

При совместном использовании композиция и интерполяция дают возможность без труда манипулировать геометрией так, что манипуляции будут казаться сложными. Например, предположим, что у вас есть геометрия, которую вы хотите повернуть для придания ей определенной ориентации. Вам известно, что нужно повернуть ее на r₂ градусов вокруг оси₂, а затем на r₁ градусов вокруг оси₁, однако окончательный кватернион вам не известен. Используя композицию, вы можете объединить два поворота применительно к геометрии и получить один кватернион, который будет представлять собой результат. Затем можно выполнить интерполяцию из исходного кватерниона в составной для получения плавного перехода от одного к другому.

Служебная библиотека D3DX содержит функции, помогающие работать с кватернионами. Например, функция D3DXQuaternionRotationAxis добавляет значение поворота в вектор, определяющий ось вращения, и возвращает результат в кватернионе, определенном структурой D3DXQUATERNION . Кроме того, функция D3DXQuaternionMultiply состоит из кватернионов, а D3DXQuaternionSlerp выполняет сферическую линейную интерполяцию между двумя кватернионами.

Приложения Direct3D могут использовать следующие функции для упрощения работы с кватернионами.

Приложения Direct3D могут использовать следующие функции для упрощения работы с тремя компонентными векторами.

Многие дополнительные функции, упрощающие задачи с помощью двух- и четырехкомпонентных векторов, входят в число математических функций , предоставляемых служебной библиотекой D3DX.

Системы координат и геометрия