Главная | iClone 3.1
Анимация поддерживает репутацию страны
Предыдущая Следующая
Функция how_many_nonstandard_Kghts используется для определения недоступных для MAXScript источников света, которые могут находиться на сцене. Например, при наличии приложения Shag: Hair компании Digimation можно создать так называемый волосяной источник света (hair-enabled light), недоступный для MAXScript. При попытке выполнить операцию MAXScript над таким источником света возвращается ошибка. Таким образом, функция how_many_nonstandard_Iights возвращает количество находящихся на сцене источников света, недоступных для MAXScript.
Для нормальной работы данной функции требуется функция are_you_a_standard_Jight. Таким образом, определение типа источника (стандартного или нестандартного) разделено в данном коде на две функции. В связи с тем что определение стандартного источника света приходится выполнять неоднократно, эту часть кода лучше выделить в отдельную функцию, а затем вызывать ее из других функций.
В строке "Функция alMights" определяется функция, которая формирует массив или перечень всех находящихся на сцене источников света, доступных для MAXScript, опять же благодаря применению функции are_you_a_standard_light.
В строке "Функция viewthe ughts" определяется основная функция данного сценария. Эта функция начинает действовать при выполнении щелчка на кнопке View The Influence (Просмотр влияния источников света). В действительности, она состоит из вызовов ряда других функций. Это своего рода элемент управления сценарием, определяющий ход его выполнения.
В строке "Функция coIIect_the_lights" определяется функция, вызываемая из функции view_the_lights. Эта функция очищает массив laststate, а затем формирует новые элементы массива из всех находящихся на сцене источников света, а также определяет, включен или выключен каждый источник света. И, наконец, она поверяет наличие на сцене нестандартных источников света. Если таковые имеются, функция collect_the_lights предоставляет пользователю сообщение в диалоговом окне, предупреждающее о том, что такие источники света в данном сценарии не обрабатываются.
Каково же содержимое массива laststate? Рассмотрим для примера сцену с двумя все-направленными источниками света, причем первый из них выключен, а второй — включен:
laststate = #(#(Omni01, false), #(Omni02, true))
В данной строке приведен пример одного массива внутри другого. Здесь имеется один массив с двумя элементами, каждый из которых, в свою очередь, является массивом с двумя элементами, а в итоге получается двухмерный массив. Доступ к такому массиву осуществляется следующим образом: laststate [IJ возвращает #(Omni01, false), поскольку запрашивается первый элемент массива laststate. A laststate 11] [2] возвращает false, поскольку запрашивается
714 Часть VI. Анимация
второй элемент двухмерного массива laststate. Необходимость формирования нового массива laststate обусловлена тем, что по завершении процесса включения, выключения и визуализации сцены источники света приходится возвращать в исходное состояние, что и делается с помошью рассматриваемой ниже функции put_it_back.
В строке "Функция view_l" определяется первый из возможных способов просмотра сцены. Следует заметить, что при выборе способа просмотра из раскрывающегося списка изменяется значение переменной rv_lype_vahie. А затем во время выполнения функции view_tiie_lights принимается решение, какую из трех функций просмотра следует вызывать, в зависимости от значения данной переменной. В частности, функция view_l соответствует способу просмотра Selected Together (Все выделенные источники света), в котором визуализация выполняется в один виртуальный буфер обмена дтя показа влияния всех выделенных в настоящий момент источников света. Прежде всего эта функция выключает все невыделенные источники света, а затем выполняет визуализацию. Обратите внимание на то, что выполнение визуализаций выделено в отдельную функцию do_a_render, вызываемую из функций view_l, view__2 и view_3, поскольку этот процесс неоднократно повторяется. Благодаря такому обобщению код выполнения визуализации сокращается в три раза.
В строке "Функция view_2" определяется функция, соответствующая второму способу просмотра сцены Selected Separate (Отдельные выделенные источники света). Структура этой функции такая же, как и у функции view_l, однако она содержит два цикла for. В первом цикле for осуществляется выбор по очереди каждого выделенного источника света, а во втором цикле for — выключение всех источников света, кроме первого источника света в массиве. После этого выполняется визуализация сцены. Затем этот процесс повторяется для второго источника света в массиве и т.д. Полученные результаты приведены на рис. 22.6 — 22.8 ранее в этой главе.
Предыдущая Следующая