Преобразование масштабированием

Преобразование изменением положения

Свойства преобразований изменением положения и масштабированием

Введение

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

Кроме того, в этой главе вы научитесь устанавливать и применять контроллеры для специальной настройки анимации.

Для всех геометрических объектов, независимо от их типа, имеются следующие свойства положения и масштаба: .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].