Пробуем силы в MaxScript
Моим первым скриптом в 3DMax’е была стена по уроку Марины Бондаренко (можно найти в Вконтакте в их группе), но это не самостоятельная работа, а просто переписывание. С этим все понятно, но я хотел бы рассказать про собственный опыт.
Идею я почерпнул на сайте render.ru, из «откровений чайника»: создание петлей из сфер, но обо всем по-порядку. Я не буду разбирать здесь базовые знания из разряда «открыть редактор MaxScript», синтаксиса и прочего; а буду писать то, что, по моему мнению, может действительно вызвать вопросы или вызвало вопросы у меня, после чего пришлось «курить мануал».
Начальный этап
Идея есть, но ее надо разбить на составляющие. На старте необходимо научится хотя бы создавать сферы. Это делается довольно просто:
Хорошо, умеем создавать сферы, а дальше то что? Чтобы создать сфер нужное количество, следует запустить цикл. Выглядит это так:
Данный код не будет работать, т.к. не определены переменные x,y,z. Нетрудно догадаться, что каждая переменная отвечает за свою ось. Раз мы хотим сделать замкнутые петли, то нас устроят тригонометрические функции. В данном случае я использовал синусы:
Как видно, x=y=z, а, следовательно, это будут не петли, а прямая, причем очень плотная (сферы радиусом пять в прямой линии от [-1,-1,-1] до [1,1,1]). К тому же, функция sin в MaxScript принимает значения в градусах, и тогда при значении сфер больше 91 они начнут накладываться сами на себя. Попробуем немного модифицировать код и запустить:
И вот результат:
Второй этап
То есть особо-то ничего не поменялось. И вот тут пора что-то кардинально менять. А именно превращать прямую в кривую, да еще и замкнутую. То есть нужно сделать так, чтобы все шары были распределены на 360 (720/1080/и т.д.) градусов по каждой оси, да еще и с разными координатами! На помощь приходит математика (я пропускаю все свои выводы, не об этом пост) и я получаю следующий код:
Чтобы было не страшно, поясняю: spnX.value — значения бегунков в окошке скрипта, о них позже. Сейчас разберемся с математикой:
Переменные с названием step — шаги в градусах для каждой создаваемой сферы по каждой оси, зависящие от количества петлей по этой и количества создаваемых шаров. Таким образом, они распределяются равномерно по всей длине наших петель. Чтобы было понятно, вот результат запуска скрипта с параметрами: 300 сфер, разбросы координат по осям по 100 в каждую сторону от нуля, 1 петля по X, 2 по Y и 3 по Z
Создаем интерфейс
В данном случае интерфейс будет являться не только кнопочкой «запустить скрипт», чтобы каждый раз не залезать в редактор, а еще и средством управления переменными: количеством сфер, петель и тому подобного. К сожалению, у меня после сохранения скрипта с подписью полей кириллицей текст превращается в «??? ???», поэтому будет транслит.
Всю необходимую информацию по созданию GUI можно почерпнуть, перейдя по паре ссылок в конце статьи, так что я расскажу только об используемых элементах.
Статья получилась и так не маленькая, переходим к сути. Код интерфейса и его скриншот (функцию анимации рассматривать здесь я не буду, т.к. не до конца разобрался, как это работает):
Разберем код по составляющим. Ключевое слово rollout создает свиток интерфейса (окошко) со всем своим нутром, счетчиками, кнопками и прочим. Дальше идут строчки, отвечающие за создание счетчиков и кнопок, после чего идет описание функций, которые должны быть вызваны на то или иное событие (в данном случае — на нажатие первой кнопки). Код для нажатия третьей кнопки не привожу.
Почему я подписал «2N волн по оси»? Потому что 360 градусов в функции синуса дает две волны — в одну, и другую сторону относительно нуля. Разброс по осям — уже писал, от [-число] до [+число].
Нюанс, который вызвал затруднения у меня: массивы. В данном случае я объявляю глобальный массив сфер spheres, а потом каждому элементу массива ставлю в соответствие свежесозданную сферу. (Кстати, строчку select spheres стоит вынести за пределы цикла, пока писал статью, доперло)
Да, знаю, глобальные переменные использовать ай-ай-ай, но я не осилил, как здесь можно по-другому. Буду благодарен за советы.
Надеюсь, данная статья поможет чем-то и вам.
Обсуждение: есть 1 комментарий
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Шикарный пост, спасибо! А я лет 6 назад открыла 3dmax… и закрыла. К сожалению. Но благодаря тебе, возможно, начну все с начала