Шаг 24 - Векторы, вершины и кватернионы

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

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

Применив композицию на кватернион, Вы тем самым объедините:

24_1.gif (166 b)

Композиция состоит из двух кватернионов, т.е. вращает геометрию вокруг оси 2 вращения 2 и затем вращает вокруг оси 1 вращение 1. Значение Q вращает вокруг одной общей оси, которая является результатом осей q2 и q1, применяемые к геометрии.

Если Вы воспользуетесь интерполяцией кватерниона, то сможете вычислить гладки переходящий путь от одной ориентированной оси к другой. Поэтому интерполяция между q1 и q2 обеспечивает простой способ оживления от одной оси к другой.

Когда Вы используете композицию и интерполяцию вместе, то они Вам обеспечать простой способ управления геометрией, которая покажется на вид сложной. Например, представьте себе, что у Вас есть некий объект, в состав которого входят два объекта и Вам их нужно повернуть вокруг одной оси. При этом Вы знаете, что радиус r2 будет поварачиваться вокруг оси 2, а радиус r1 вокруг своей оси 1. Для этого Вы просто объединяете эти две оси вращения, чтобы получить одну едиснственную. И затем применить интерполяцию от оригинала к кватерниону, чтобы достигнуть плавного перехода от одной оси к другой.

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

Используя Direct3D, можно использовать следующие функции, чтобы упростить себе задачу по работе с кватернионами:

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

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


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Хавов Евгений Валерьевич - 17.08.2002