Написание скриптов для Blender 2.49
Шрифт:
Нам не нужно соединять все эти триплеты вершин, так как главный меш сам не рендерится (он будет полностью закрыт семенами). Все-же мы определим грань в каждом триплете вершин; в противном случае для разработчика модели будет трудно увидеть главный меш в режиме редактирования.
Лепестки являются отдельными объектами, главный меш будет их родителем как объект, так как они не должны следовать за кривизной меша головки, только за позицией и вращением. Головка, в свою очередь, будет потомком стебля, так что мы можем перемещать всю сборку, перемещая стебель.
Наконец, мы назначаем все индивидуальные объекты в единую группу. Таким образом, можно будет легко выбрать всё за один раз, и это позволит нам ссылаться или добавлять один или больше подсолнухов из внешнего файла как единую сущность.
Мы сказали, что все наши семена и лепестки - отдельные объекты, но имеет больше смысла сделать взамен него экземпляр (в Блендере называется создать связанную копию). Так как все семена и все лепестки, которые мы смоделировали, идентичны, мы можем ссылаться на те же самые меш-данные и просто изменять позицию, вращение, или масштаб объекта как нужно, сохраняя приличное количество памяти. При использовании Блендера интерактивно, мы можем создать экземпляр объекта, нажимая Alt + D (вместо Shift + D для обычной копии). В нашем скрипте, мы просто определяем новый объект и указываем его на тот же меш-объект, передавая ссылку на тот же меш при вызове Object.New.
Давайте посмотрим на основную часть скрипта, который создаёт подсолнух (полный скрипт доступен как sunflower.py). Первый шаг должен вычислить позицию семян:
Исходя из этих позиций мы создаем головку, у которой вершины и грани мы можем сделать родителем зёрен и собрать их в меш головки (выделенная часть следующего кода):
Следующий шаг должен создать базовый меш для зерна и создать объекты, которые ссылаются на этот меш (выделенная часть следующего кода):
Каждому зерну затем назначается пригодная позиция и родитель - подходящие вершины в меше головки цветка (выделенная часть следующего кода):
Затем мы создаем меш лепестка и размещаем дубликаты этого меша вдоль обода головки цветка (выделенная часть следующего кода):
Каждый лепесток позиционируется, поворачивается вдоль обода и назначается потомком головки (выделенная часть следующего кода):
Наконец, мы создаём меш и объект стебля, и назначаем стебель родителем головки. Таким образом, весь цветок может перемещаться при перемещении стебля:
Все, что осталось сделать - нужно сгруппировать зерна и лепестки в отдельных группах (выделено), и затем все части подсолнуха в целом группируются, чтобы было легко ссылаться на него:
Функция addmeshduplicate, используемая в коде, объявлена в модуле Tools следующим способом:
Принимая сцену, меш, и имя (необязательное) для объекта, она добавляет новый объект в сцену. Меш-объект принимается как аргумент, и может использоваться снова и снова для создания новых объектов, которые ссылаются на этот же меш.