Настройка сцены

Flexiable

Ни для кого не секрет, что в последние годы, популярность продуктов Macromedia очень возросла, в частности Flash завоевал львиную долю интернета в области векторных изображений. На сегодняшний день Flash может позволить некоторые простейшие 3д вычисления, с помощью которых не составит особого труда спроектировать на экран простую 3д модель. В паутине существует множество “open source” 3д движков, однако далеко не во всех есть поддержка загрузки моделей из внешних источников, и уж совсем нет поддержки анимации этих моделей. Именно этими проблемами мы здесь и займемся.

Сразу предупреждаю: Здесь не будут описываться тонкости языка Action Script 2 (Flash 8), однако будет доступен исходник “3d движка” для флеша с поддержкой загрузки анимационных моделей, который вы сможете использовать в своё удовольствие.

Структура модели: Для наглядности привожу простой пример структуры модели, вы же можете использовать более оптимизированные в плане повышения скорости, структуры.

Модель представляет собой двумерный массив, A[I,J] i-ым элементом которого является номер кадра, а j-ым координаты точкек. Т. о. получается что при расчете проекции, от нас потребуется лишь пробежать по всем j элементам массива, при этом в каждом следующем кадре увеличивать i.

Настройка сцены и “правильной” анимации:

Создаем необходимую нам модель, к примеру Biped. Для упрощения экспорта, нам необходимо сделать несколько точек, которые мы и будем экспортировать. Для этого создаем Dummy (Можно использовать любой из Helpers), в ключевых местах, (это сгибы и окончания) в нашем случае, в локтях, кистях, на шее, тазе, и ногах. Так как наша модель симметричная, достаточно будет создать 7 Dummy, выделить Dummy на руках и ногах, и скопировать их с помощью mirror.

После этого необходимо привязать каждую Dummy к соответствующей части тела. Для этого заходим в меню Animation->Constraints->Attachment Constraints.

После этого Dummy должен поменять угол:

Когда все завершено, приступаем к долгожданной анимации, я использовал стандартную ходьбу biped-а:

Выделяем любую часть тела biped-а переходим в вкладку Motion, в ней ищем кнопку Footstep Mode, создаем несколько шагов(Create Multiple Footsteps…), а дальше создаем ключи анимации(Create Keys for Inactive Footsteps). Да и не забудьте поставить здесь же в Modes and Display -> опцию InPlace Mode если хотите чтобы модель шла на месте. Теперь оставляем диапазон кадров, для того чтобы можно было в дальнейшем зациклить нашу анимацию Time Configuration:

Так как в нашем движке есть интерполяция, не забудьте уменьшить количество кадров отрезка времени, Re-scale Time->Length:

MaxScript: Далее запускаем MaxScript В нем пишем: rollout main «Flash 3d export v0.01» ( —создаем список для отображения экспортиркемых объектов —три кнопки для добавления/удаления из списка и экспорта соответсвенно —а так же поле ввода, для сохранения в файл listbox ListObjects «Objets to export:» width:180 align:#center button add «add Selected» pos:[10,165] width:85 button remove «Remove» pos:[105,165] width:85 edittext edit «Path\FileName» text:»C:\\Model.m3d» wodth:180 align:#center button export «Export!» pos:[10,215] width:180 —обрабатываем события у кнопок on add pressed do ( —добавление ListObjects.items = for o in selection collect o.name —добавляем в список выделенные объекты ListObjects.items = sort ListObjects.items —далее сортируем ) on remove pressed do ( —удаление for i=1 to ListObjects.items.count do ( —пробегаем по всем элементам списка temp = ListObjects.items —заводим временную переменную deleteItem temp 1 —удаляем всегда первый элемент, так как послу удаления меняются индексы у элементов ListObjects.items = temp —возвращаем изначальный массив ) ) on export pressed do ( —экспорт sliderTime = 0 —переходим на первый кадр txt = createFile edit.text —задаем соответсвие для файла с адресом edit.text while sliderTime & или загружаем скрипт export.ms, и компилируем: File->Evaluate All Затем нужно выделить необходимые Dummy и нажать на кнопку add Selected после чего выделенные объекты должны появиться в списке объектов для экспорта. Теперь остаётся лишь нажать на кнопку Export!.

Flash 8:

Открываем файл Main.fla, щелкаем по первому фрейму и открываем вкладку Actions

Там вы найдете такую строку: _3dScene.addObject(10,800,0, 0, 10, 100, 0, «guy_lv2»); — это означает что мы создаем объект с координатами x=10, y=800,z=0 , цвет=0, толщина=10, здоровье=100, текущий кадр = 0 , и url = “guy_lv2” модели соответственно. Вам же вместо “guy_lv2” следует написать название вашей модели без расширения.
Потом скопировать вашу модель в папку models/имя_модели.m3d и там же создать файл имя_модели.e3d, для того чтобы задать какие линии мы будем рисовать.
Вот здесь нам придется сделать все вручную, сначала объясню задачу.
Пока flash видит только координаты точек (x,y,z) из наборов точек, однако он не сможет нарисовать линии не зная взаимосвязей м/у точками, именно это и предстоит нам задать. Здесь я так и не смог автоматизировать процесс, придется делать вручную:

Мы видим расположение наших точек. Для нашей модели видно, что самым оптимальным способом задания связей будет нахождение самого длинного непрерывного отрезка. Это отрезок point01-> point10-> point02-> point03-> point11, запишем его через запятую в только что созданный файл: имя_ модели.e3d, затем надо ввести знак разбиения, пусть будет “&”.

guy_lv1.e3d: 1,10,2,3,11,&,

Дальше вводим оставшиеся отрезки таким же образом:

guy_lv1.e3d: 1,10,2,3,11,&,9,6,5,7,8,&,2,5,4

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

Скачать main.fla, export.ms.

Архив файлов урока

Примечание: ресурсы Flash очень ограничены и после порядка 300 точек клип начинает существенно тормозить.

Спасибо за интерес, если возникнут какие-то трудности, обращайтесь буду рад помочь.

Понравилась статья? Поделиться с друзьями: