Загрузка моделей в формате OBJ


OBJ — это формат файлов описания геометрии, разработанный в Wavefront Technologies для их анимационного пакета Advanced Visualizer. Формат файла является открытым и был принят другими разработчиками приложений 3D графики и может быть экспортирован/импортирован в e-Frontier's Poser, Autodesk's Maya, XSI, Blender, MeshLab, Misfit Model 3D, 3D Studio Max и Rhinoceros 3D, Hexagon, Newtek Lightwave, Art of Illusion и т. д. По большей части это общепринятый формат.


Формат файлов OBJ — это простой формат данных, который содержит только 3D геометрию, а именно, позицию каждой вершины, связь координат текстуры с вершиной, нормаль для каждой вершины, а также параметры, которые создают полигоны.


Основные особенности формата OBJ:


  • Формат поддерживает не только треугольники, но и квады и многоугольники

  • Формат не хранит иерархию объектов

  • Все материалы хранятся в отдельном MTL файле

Подготовка модели в 3D MAX


  • Открываем свою модель в 3D MAX.


  • Нажимаем в меню кнопку File, в выпадающем меню выбираем Export...




  • В открывшемся окне Select File to Export:




    • В строке Имя файла: задаем имя файла (например, House)


    • В строке Тип файла: выбираем gw::OBJ-Exporter (*.OBJ) и нажимаем кнопку Сохранить



  • В открывшемся окне OBJ Exporter Options:




    • В разделе Geometry выделяем Texture coordinates, также можно выбрать в строке Faces тип граней (Triangles, Quads, Polygons)


    • В разделе Optimize можно выбрать vertex и texture-coord, но все эти возможности есть и в движке, реализованы они классом MeshOptimization


    • В разделе Material выделяем Use material и Create mat-library и нажимаем кнопку Map-Export...


  • В открывшемся окне OBJ Map-Export Options:




    • Выделяем extended map-params


    • Выделяем convert bitmaps


    • В строке Format: выбираем jpg или png


    • В строке Size: устанавливаем размер текстур


    • Нажимаем кнопку Close


  • В окне OBJ Exporter Options:




    • Нажимаем кнопку Export


Так, мы экспортировали модель из 3D MAX в формат OBJ, в данном случае получили файлы House.obj и House.mtl, самое время перейти к загрузке этой модели в движок.


Загрузка модели


Для начала мы создаем переменную в классе.


private var loader:LoaderOBJ;


Создадим метод и назовем его например, setupLoading.


private function setupLoading():void

{

this.loader = new LoaderOBJ();

this.loader.load("resources/House.obj");

this.loader.addEventListener(LoaderEvent.PARSING_COMPLETE, this.onParsingComplete);

}


В этом методе мы создаем экземпляр загрузчика, затем передаем в метод загрузчика load() адрес файла и подписываемся на событие "Разбор файла завершен".


Теперь создадим метод, который будет вызываться по событию "Разбор файла завершен" и назовем его например, onParsingComplete.


private function onParsingComplete(event:LoaderEvent):void

{

var i:int;

var len:int = this.loader.meshs.length;

while (i < len)

{

this.mesh = this.loader.meshs[i];

this.scene.addChild(this.mesh);

i++;

}

this.loader.removeEventListener(LoaderEvent.PARSING_COMPLETE, this.onParsingComplete);

this.loader = null;

}


В методе мы обходим массив созданных объектов this.loader.meshs из файла и добавляем все созданные объекты на сцену, после чего удаляем событие "Разбор файла завершен" и удаляем лоадер.




Этот пример и более полный исходник вы можете скачать.