Преобразование масштабированием
Преобразование изменением положения
Свойства преобразований изменением положения и масштабированием
Введение
В этой главе вы научитесь эффективно пользоваться преобразованиями при написании сценариев. Объекты обычно требуется преобразовывать на основании пользовательского ввода, а для их анимации устанавливаются ключевые кадры.
Кроме того, в этой главе вы научитесь устанавливать и применять контроллеры для специальной настройки анимации.
Для всех геометрических объектов, независимо от их типа, имеются следующие свойства положения и масштаба: .pos
.position - то же, что и .pos .scale
В этой главе сначала рассматриваются преобразования изменением положения и масштабированием, поскольку они выполняются сходным образом. А у преобразования вращением имеются ограничения, которые приходится принимать во внимание при выполнении вращения по сценарию.
Положение объекта может быть установлено двумя способами.
• Непосредственно с помощью свойства .pos или .position
• Косвенно с помощью метода move
В главе 1 вы научились устанавливать положение любого объекта непосредственно с помощью свойства .pos или .position:
Глава 5
s = sphere()
s.pos = [150, 10, 0]
s.pos.x = 200
А с помощью метода move это делается следующим образом:
move s [10.0, 10.0, 10.0]
Перечень аргументов метода move состоит из ссылки на перемещаемый объект и величины этого перемещения в виде данных типа Point3. Следует, однако, иметь в виду, что метод move перемещает объект не в точку с координатами [x, y, z], а на величину [x, y, z]. Следовательно, если применить данный метод несколько раз, объект будет непрерывно перемещаться на указанную величину.
Значение свойства положения задается явно и не увеличивается всякий раз.
Для того чтобы воспользоваться свойством pos и методом move, выполните следующее упражнение.
1. Установите 3dsMax в исходное состояние.
2. Введите в приемнике команд следующую строку кода:
s = sphere()
3. Введите следующий ряд строк кода:
s.pos.x = 25
s.pos.x = 25
s.pos.x = 25
При выполнении данной строки кода три раза подряд сфера устанавливается в точке с координатой x = 25.
4. Введите следующий ряд строк кода и нажмите клавишу <Enter> после каждой из них:
move s [25,0,0]
move s [25,0,0]
move s [25,0,0]
5. В итоге сфера переместится на 75 единиц по оси X.
Свойство масштаба (scale) определяет сжатие или растяжение объекта вдоль указанной оси. По умолчанию значение составляющих X, Y и Z свойства масштаба равно 1,0, что соответствует масштабу 100% объекта по каждой из осей координат. Если установить значение одной из составляющих свойства масштаба равным 2,0, исходный масштаб объекта увеличится вдвое, а если установить ее значение равным 0, 5, то исходный масштаб объекта сократится наполовину.
Масштаб объекта можно изменить по всем трем координатам следующим образом: s.scale = [2.0, 1.0, 0.5]
Аналогично положению, масштаб указывается в виде данных типа Point3. В приведенном выше примере объект растягивается в два раза вдоль оси X, не изменяет свой размер вдоль оси Y и сокращается вдоль оси Z. Если же объект требуется растянуть только вдоль оси X, для этого достаточно ввести следующую строку кода: s.scale.x = 2.0
Преобразования и анимация
Для пропорционального масштабирования объекта достаточно умножить свойство масштаба на требуемую величину:
s.scale = 3.0*s.scale
-- или
s.scale * = 3.0
Приведенный выше фрагмент кода означает следующее: "Установить новое значение свойства масштаба, которое в 3 раза больше его текущего значения". При этом объект масштабируется по всем трем осям.
Аналогично свойству pos и методу move для свойства масштаба имеется соответствующий метод scale. Данный метод реализуется следующим образом:
b = box()
scale b [1.0, 2.0, 3.0]
В этом фрагменте кода параллелепипед масштабируется на разную величину в направлении каждой из осей координат. Свойство .scale и метод scale действуют таким же образом, как и свойство .position и метод move, а именно: значение свойства задается явно в виде данных типа Point3, а метод изменяет это значение с указанным приращением.
Для масштабирования объекта выполните следующее упражнение.
1. Введите в окне приемника команд следующую строку кода:
b = box()
2. Для того чтобы установить свойство масштаба, введите и вычислите следующую строку кода: b.scale = [2, 2, 2]
В качестве результата в приемнике команд возвращается значение [2,2,2] данного свойства.
3. Для того чтобы вновь установить масштаб, введите следующую строку кода: b.scale = [2, 2, 2]
В приемнике команд по-прежнему возвращается значение [2,2,2].
4. Примените метод scale, введя следующую строку кода: scaleb [2, 2, 2]
В приемнике команд возвращается значение [4,4,4].