Во время работы с объектами сцены непосредственно в пользовательском …

Во время работы с объектами сцены непосредственно в пользовательском интерфейсе 3ds Max ограничения, присущие эйлерову представлению вращения вокруг осей X,Y и Z, зачастую никак не мешают поворачивать объекты и получать вполне предсказуемые результаты. Для этого просто выбирается система координат, наиболее подходящая для конкретной ситуации, и далее вращение выполняется визуально для достижения желаемого результата.

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

И в этом случае на помощь приходит метод представления процесса вращения с помощью кватернионов. Кватернионы явно обозначают всякое возможное вращение, что позволяет точно и однозначно задать вращение вокруг осей X, Y и Z.

Значение кватерниона выражается в виде угла и значения типа Point3, описывающего некий вектор:

quat

Векторная часть данного выражения относится к выражению типа Point3. Отдельные значения в выражении типа Point3 всегда находятся в пределах от -1 до 1. Ниже приведены некоторые примеры обозначения кватернионов:

quat 30 [1, 0, 0]
quat 30 [0.266917, 0.534798, 0.801715]

Для того чтобы лучше понять кватернионы, представьте себе сферу с вектором, направленным от центра сферы к ее поверхности. Векторная часть кватерниона обозначает направление вектора, в угол— количество градусов, на которое объект должен повернуться вокруг данного вектора.

Если векторное значение состоит из единицы и двух нулей, то вектор нетрудно себе представить направленным вдоль одной из осей X, Y или Z. При этом 1 определяет ось, вдоль которой вектор направлен. Так, векторное значение [1, 0, 0] направляет вектор вдоль оси X.

В более сложном вектором выражении, как, например, [0.266917, 0.534798, 0.801715], вектор направлен из воображаемого центра сферы к точке поверхности, определяемой данным выражением типа Point3. Объект будет вращаться вокруг данного вектора на количество градусов, определяемых угловым значением кватерниона. В приведенных выше примерах это угловое значение равно 30.

Как правило, используются векторы, направленные вдоль оси X, Y или Z. А для того чтобы использовать векторы, имеющие другое направление, нужно знать, как их строить.

Векторные значения

Векторные значения кватернионов следует рассчитывать очень аккуратно. Квадратный корень из суммы квадратов всех составляющих должен быть равен 1. Так, из приведенного выше примера кватерниона quat 30 [0.266917, 0.534798, 0.801715] можно установить, что

квадратный корень из суммы (0.266917)2 + (0.534798)2 + (0.801715)2 = 1

Это ограничение объясняется тем, что длина вектора должна быть всегда равна 1. Следовательно, длина вектора всегда равна квадратному корню из суммы x2 + y2 + z2.

Правильное определение векторных значений кватерниона — занятие долгое и утомительное. Поэтому для упрощения расчетов применяется метод normalize.

rot_vect = normalize [10, 14, 5]
q = quat 90 rot_vect

Предопределенные значения углов вращения

В MAXScript имеется ряд предопределенных глобальных переменных. К ним относятся три следующие переменные: x_axis, y_axis и z_axis. Они представляют значения типа Point3, обозначающие вращение вокруг соответствующих осей:

x_axis представляет[1, 0, 0]
y_axis представляет[0, 1, 0]
z_axis представляет[0, 0, 1]

В любом выражении, описывающем вращение, выражение типа Point3 можно заменить соответствующей переменной. Зная это, данное выражение можно использовать для составления следующего выражения:

q = quat 45 x_axis

Аналогично методу eulerAngles, объект кватернионного вращения может быть присвоен любому вращаемому объекту.

b = box()
q = quat 45 x_axis
rotate b q

Выражения в качестве аргументов

Нередко оказывается удобнее сократить два или более оператора сценария до одного. В MAXScript это нетрудно сделать при вызове функций. Во всех приведенных выше примерах переменные или явно указываемые числовые значения были приведены в качестве аргументов. Но в этом качестве можно использовать и выражения. Выражение представляет собой конструкцию для вычисления значения. Так, если в приемнике команд ввести quat 20 x_axis и нажать клавишу , в ответ появится сообщение об успешном выполнении команды.

Во веденном выше выражении было вычислено значение, хотя оно и не было присвоено переменной. В данном случае создается кватернионный объект, а вычисленное значение хранится во внутренней переменной MAXScript, которая недоступна для пользователя. Оба приведенных ниже сценария выполняют одно и то же действие.

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

rot = quat 30 y_axis
b = box rotation:rot

А во втором сценарии то же самое делается с помощью выражения в конструкторе:

b = box rotation:(quat 30 y_axis)

В выражении quat 30 y_axis вычисляется кватернион, поэтому его можно ввести вместо аргумента функции. Данное выражение сначала вычисляется внутри 3ds Max, а затем его значение присваивается свойству вращения. Такое выражение следует указывать в круглых скобках, чтобы 3ds Max было проще распознать его начало и конец. Где и как часто следует использовать подобные выражения, зависит от ваших целей и стиля программирования.

Кватернионы имеют свои ограничения. В частности, углы можно указывать только в пределах от -180° до 180°. Если же требуется повернуть объект на угол, который превышает данный 360-градусный диапазон, придется воспользоваться методом AngleAxis.

Понравилась статья? Поделиться с друзьями: