Метод 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 соответственно.