Контексты
МетодAngleAxis
Если объект нужно повернуть на угол более 360°, в таком случае можно воспользоваться объектами класса AngleAxis. Такие объекты реализуются подобно кватернионам следующим образом:
ang = angleaxis 30 [1, 0, 0]
ang = angleaxis 30 x_axis
Оба приведенных выше выражения равнозначны, поскольку в обоих случаях создается объект ang, который обеспечивает вращение на 30° вокруг оси X. Для вращения объекта по методу AngleAxis выполните следующее упражнение.
1. Установите 3dsMax в исходное состояние.
2. Введите следующую строку кода в приемнике команд, чтобы создать стандартный параллелепипед:
b = box()
3. Включите режим Auto Key и переместите ползунок временной шкалы анимации к кадру 10. Введите в приемнике команд следующую строку кода:
b.rotation.x_rotation = 720
4. Воспроизведите анимацию. Объект не вращается.
5. Переместите ползунок временной шкалы анимации к кадру 10. Если режим Auto Key все еще включен, введите в приемнике команд следующий фрагмент кода:
ang = angleaxis 720 [1, 0, 0]
rotate b ang
6. Выключите режим Auto Key и воспроизведите анимацию. Объект совершит два полных оборота.
У всякого геометрического объекта имеется своя точка опоры, которая представляет собой точку, вокруг которой происходит перемещение, вращение и масштабирование объекта. До сих пор в этой главе преобразования рассматривались лишь относительно устанавливаемой по умолчанию точки опоры объекта.
Для преобразования точки опоры объекта вручную выполните следующее упражнение.
1. Создайте любой объект.
2. Перейдите к панели команд Hierarchy.
3. Если объект выделен, активизируйте кнопку Affect Pivot Only (Оказывать влияние только на точку опоры).
Точка опоры перемещается и вращается, когда выполняются преобразования перемещением и вращением. На приведенном ниже рисунке показана
Глава 5
точка опоры параллелепипеда после того, как он был преобразован произвольным образом.
Для изменения точки опоры объекта в MAXScript воспользуйтесь свойством .pivot, чтобы установить или переместить точку опоры, например:
object.pivot = [0, 0, 10.0]
или
object.pivot.z = 10.0
Любые последующие преобразования объекта будут происходить относительно нового центра преобразования.
Для преобразования точки опоры средствами MAXScript выполните следующее упражнение.
1. Создайте параллелепипед. Введите следующую строку кода и нажмите клавишу <Enter>:
b = box()
2. Переместите точку опоры данного объекта. Введите следующую строку кода и нажмите клавишу <Enter>:
b.pivot.z = 40.0
3. Перейдите к панели команд Hierarchy.Активизируйте кнопку Affect Pivot Only.
Убедитесь в том, что параллелепипед выделен. Как видите, точка опоры параллелепипеда смещена по оси Z.
Преобразоввния и анимация
4. Установите точку опоры в центре параллелепипеда с помощью свойства .center. Введите следующую строку кода и нажмите клавишу <Enter>:
b.pivot = b.center
Как видите, точка опоры перемещается в центр параллелепипеда.
Если выполняется вращение, в 3dsMax предполагается, что это делается в системе мировых координат относительно точки опоры. Преобразования можно выполнять и относительно других точек объекта или же в иной системе координат. Это делается с помощью контекстов, где указывается ссылка на выполняемую операцию. К наиболее важным контекстам относятся coordsys и about.
• coordsys указывает систему координат для операции.
• about указывает точку опоры (или центр преобразования) для операции. Контекст about применяется к операциям вращения и преобразования.
Глава 5
Для того чтобы воспользоваться контекстом about, выполните следующее упражнение.
1. Создайте два цилиндра на сцене. Для этого введите следующие строки кода, нажав после каждой из них клавишу <Enter>:
cl = cylinder height:50
c2 = cylinder pos:[40, 0, 0]
Далее попробуйте выполнить два разных вращения цилиндра c1.
2. Введите следующую строку кода и нажмите клавишу <Enter>:
rotate c1 (quat 45 y_axis)
По умолчанию используется система мировых координат, а точка опоры находится в основании цилиндра. Далее вам предстоит ознакомиться с контекстом about и его применением.
3. Щелкните правой кнопкой мыши в любом видовом окне и нажмите комбинацию клавиш <Ctrl+Z>, чтобы отменить только что выполненное вращение.
4. Введите в приемнике команд следующую строку кода и нажмите клавишу <Enter>:
about c2 rotate c1 (quat 45 y_axis)
Преобразования и анимация
Теперь результат вращения будет иным, поскольку на этот раз центр
преобразования находится в точке опоры цилиндра c2.
Префикс контекста about указывается в начале, а не в конце выражения, как можно было бы ожидть. В 3dsMax операторы интерпретируются слева направо, поэтому контекст следует применять до операции вращения. Если поместить префикс контекста about в конце выражения, он будет применен к следующей вводимой операции.
Ниже приведены другие примеры применения контекста about:
• about [x, y, z] — выполняет вращение определенной точки;
• aboutselection — выполняет вращение вокруг центра выделенных в данный момент объектов.