Главная | iClone 3.1
Анимация поддерживает репутацию страны
Предыдущая Следующая
?n ran num =
(
random 1 9999999 )
Рассмотрим функцию turn_on. При вызове данной функции она отображает гизмо всех источников света. Ниже приведен код этой функции: fn turn__on = (
if $ = undefined then
(MessageBox "Please select at least one object"
^title:"LightCleaner")
else
Глава 22. Создание сценариев для специализированной анимации 697
(
for i = 1 to select ion. count do (
if superclassof selection[i] = light then (
selection[i].showNearAtten = true
selection[i].showFarAtten = true
if classof selection[i] = targetSpot or
classof selection[i] = freeSpot or
classof selection[i] =
^TargetDirectionallight or
classof selection[i] = Directionallight
'??then
selection[i].showCone = true )
)
)
)
Преобразуем код этой функции в символический код: Функция turn_on
Если не выделен ни один из объектов, вернуть сообщение об ошибке иначе
Выполнить следующий код для каждого выделенного объекта
(
Если выделенный объект является источником света
(
Включить отображение гизмо ослабления вблизи Включить отображение гизмо ослабления вдали
Если же выделенный объект является нацеленным прожектором, свободным прожектором, направленным на цель прожектором либо направленным источником света, включить отображение конуса его освещения
)
)
ПРИМЕЧАНИЕ
Обратите внимание на то, что в данной функции осуществляется ряд проверок, обеспечивающих ее выполнение только по отношению к определенным типам обьектов. Обычно такой процесс называется фильтрацией (filtering). На первом этапе фильтрации определяется факт выделения каких-либо обьектов. Если ни один из обьектов не выделен, данная функция не выполняется. Ведь пользователь может и забыть о выделении объе<-тов перед выполнением данного сценария, поэтому следует быть готовым ко всяким неожиданностям. На следующем этапе фильтрации проверяется, является ли каждый выделенный обьект источником света. Если это источник света, над ним выполняются определенные действия. А поскольку у всенаправленных источников света отсутствуют конусы освещения, далее осуществляется проверка на наличие таких источников света. Если источник света не является всенаправпенным, тогда включается режим отображения конуса его освещения. Аналогичный процесс выполняется и в функции turn_off
698 ЧастьVI. Анимация
Выполнение сценария
Для выполнения сценария выберите команду Run Script из главного меню MAXScript. Выберите файл сценария LightCJeaner_vlOOa.ms. При этом появится перемешаемая панель, приведенная на рис. 22.2.
Выделите все находящиеся на сцене источники света (а также другие объекты, ибо благодаря вышеупомянутой фильтрации в данном сценарии не будут выполняться операции над объектами, не являющимися источниками света). При нажатии кнопки Off режим отображения гизмо всех источников света выключается. Благодаря этому сцена становится менее загроможденной, как показано на рис. 22.3.
Рисунок 22.2.
Перемещаемая панель в качестве интерфейса сценария LightCleaner
Рисунок 22.3.
Обратите внимание, насколько менее загроможденной оказывается сцена в видовом окне без источников света
Сценарий LightCleaner, версия 1.10
Посте того, как сценарий LightCleaner стал свободнодоступным в Internet, я получил сообщение по электронной почте от одного пользователя, который внес изменения в данный сценарий идя выполнения с его помощью ряда других задач. В сущности, его сценарий предусматривал не непосредственное отключение режима отображения гизмо источников света, а выбор возможности включать или выключать конус освещения, а также ослабление вблизи или вдали. Мне понравилась его идея, и на основании его варианта сценария я создал свой собственный. Итак, разархивируйте файл LightCleaner_v 110a,zip, находящийся в папке CHAPTER22/MAXSCRIPT на сопровождающем эту книгу CD-ROM. Он содержит следующий код:
Глава 22. Создание сценариев для специализированной анимации 699
700 Часть VI. Анимация
Глава 22. Создание сценариев для специализированной анимации 701
702 Часть VI. Анимация
Глава 22. Создание сценариев для специализированной анимации ~] 03
При выборе другой кнопки-переключателя режима Cone изменить •??состояние соответствующей переменной
При выборе другой кнопки-переключателя режима NearAtten изменить ^состояние соответствующей переменной
При выборе другой кнопки-переключателя режима FarAtten изменить ^состояние соответствующей переменной
Предыдущая Следующая