Метод EulerAngles является вероятно самым понятным и лучше всего …

Метод EulerAngles является, вероятно, самым понятным и лучше всего соответствующим тем операциям вращения, которые можно выполнять и наблюдать в интерфейсе 3ds Max.

Конструктор класса EulerAngles воспринимает три аргумента, выражаемые в градусах (по одному для каждой из осей). Эти значения используются в данном методе для вращения объекта на указанное число градусов вокруг заданной оси в системе мировых координат:

b.rotation = eulerAngles 0 45 0

В приведенной выше строке кода объект поворачивается на 45° вокруг оси Y в системе мировых координат. Вращение по методу eulerAngles проще всего понять, поскольку оно соответствует вращению объектов, наблюдаемому в видовых окнах.

Результат вращения по методу eulerAngles можно присвоить переменной, чтобы затем использовать в другом объекте:

ang = eulerAngles 0 45 0
b.rotation = ang

Переменная ang в действительности представляет собой объект MAXScript, имеющий тип данных вращения.

Углы вращения вокруг нескольких осей указываются следующим образом:

ang = eulerAngles 30 20 44

При установке ключевых кадров анимации с помощью метода eulerAngles изменение вращения между двумя последовательными ключевыми кадрами ограничивается углом 180°, поскольку в методе eulerAngles используется кратчайший путь перехода от одного ключевого кадра к другому.

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

                       1.  Введите в приемнике команд следующий фрагмент кода, чтобы создать цилиндр и переменную euAngle:

c = cylinder height:50
euAngle = eulerAngles 0 45 0

В итоге значение угла поворота типа eulerAngles присваивается переменной euAngle.

                       2.  Введите следующую строку кода, чтобы повернуть цилиндр:

rotate c euAngle

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

Свойство вращения

Составляющие свойства вращения объекта могут использоваться для задания вращения вдоль конкретной оси. Например, выражения

euAngle = eulerAngles 30 45 60
rotate b euAng

можно заменить выражениями, в которых свойство вращения устанавливается непосредственно:

b.rotation.x_rotation = 30
b.rotation.y_rotation = 45
b.rotation.z_rotation = 60

При таком способе установки свойства вращения угол поворота ограничивается величиной 360°.

Для проверки ограничения угла поворота величиной 360° выполните следующее упражнение.

1.  Установите 3ds Max в исходное состояние.

                       2.  Создайте стандартный параллелепипед, введя в приемнике команд следующую строку кода:

b = box()

                       3.  Переместите ползунок временной шкалы к кадру 100, включите режим Auto Key (Автоматическая расстановка ключевых кадров), а затем введите следующую строку кода:

b.rotation.z_rotation = 720

                       4.  Выключите режим Auto Key и воспроизведите анимацию.

Объект не вращается.

                       5.  Переместите ползунок временной шкалы к кадру 100, включите режим Auto Key, а затем введите следующую строку кода:

b.rotation.z_rotation = 450

                       6.  Выключите режим Auto Key и воспроизведите анимацию.

Объект повернется только на 90°, поскольку полный его оборот на 360° игнорируется (450 – 360 = 90).

Ограничения, присущие методу EulerAngles

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

                       1.  Установите 3ds Max в исходное состояние.

                       2.  Откройте окно приемника команд MAXScript Listener.

                       3.  Создайте в окне вида сверху плоский и длинный параллелепипед, введя следующую строку кода:

b1 = box length:100 width:75 height:25

                       4.  Создайте копию параллелепипеда:

b2 = copy b1

                       5.  Переместите вновь созданную копию параллелепипеда в сторону от оригинала:

b2.pos.x = 100

Такие размеры обоих параллелепипедов позволят вам лучше представить себе вращения, выполняемые в данном упражнении.

                       6.  Выберите команду Graph EditorsðTrack View — Dope Sheet (Редакторы графических представленийðВид трека — Подготовительная таблица) из главного меню 3ds Max. Разверните иерархию треков в окне Track View вплоть до треков анимации вращения объекта Box01.

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

                       7.  Выберите локальную систему опорных координат, введя в приемнике команд следующую строку кода:

set coordsys local

                       8.  Введите в приемнике команд следующую строку кода:

b1.rotation = eulerAngles 45 0 0

Параллелепипед повернется на 45° вокруг оси X мировых координат. Соответствующее значение на треке X Rotation в окне Track View изменится до -45.

Далее вам предстоит повернуть параллелепипед вокруг его оси Y.

                       9.  Введите в приемнике команд следующую строку кода:

b1.rotation = eulerAngles 0 45 0

Казалось бы, в результате этого вращения соответствующее значение на треке Y Rotation должно было бы измениться до 45, однако вместо этого значения на треках X Rotation, Y Rotation и Z Rotation стали равны около -54,74, -30,00 и 35,26 соответственно.

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