Использование моделей из 3DStuido MaxОглавление.1. Введение.Почти в любой программе, так или иначе связанной с трёхмерной графикой, используется некоторое количество практически не изменяющихся объектов (моделей). Наиболее удобно такие объекты создавать с помощью редакторов трёхмерной графики, вроде 3DStudio MAX, SoftImage, Maya и т.д. Далее в этом тексте речь пойдёт об изпользовании моделей сделанных именно в 3DStudio MAX версий 2, 2.5 и 3. 2. Получение файла модели.Наиболее удобным для понимания и работы мне показался файл формата .ASE (один из форматов экспорта в 3DStudio MAX). Получить такой файл очень просто: Закончив создание модели откройте меню "File". В нём есть пункт - "Export Selected", в появивщемся дилоговом окне выберете тип файла - .ASE. Повится диалог с опциями экспорта: Установите следующие опции (как на картинке) - Mesh Defenition, Materials, Mesh Normals, Mapping Coordinates, Geometric. 3. Ограничения.Этот текст описывает написанную мной функцию для загрузки моделей из файлов 3DSMAX формата .ASE. Но к сожалению эта функция пока-что не поддерживает загрузку сложных составных моделей, моделей с несколькими назначенными материалами(будет использован только первый) или несколькими файлами текстур. Таким образом, чтоб использовать мою функцию модель необходимо делать единам объектом используюя только один файл текстур и один материал. 4. Прототип функции.Прототип функции выглядит так: int glLoadModel(char *filename,GLuint *ListNum); Параметры:char *filename - указатель на строку кончающююся нулём (null-terminated string) с именем файла модели. GLuint *ListNum - указатель на номер display list`а который получится в результате загрузки модели. Возвращаемое значение:Функция возвращает код ошибки( эти коды определены в файле заголовка glModelUt.h). GL_MODEL_OK - ошибок нет, модель загружена. GL_MODEL_NOLIST - у OpenGL не осталось свободных номеров для dispay list`а. GL_MODEL_NOSUCHFILE - невозможно открыть файл с указанным именем. GL_MODEL_IOERROR - ошибка в процессе считывания файла. GL_MODEL_NOMEMORY - недостаточно памяти для создания временных массивов. GL_MODEL_INVALIDFORMAT - неверный формат указанного файла. Ремарка:В процессе создания display list`а функции необходимо достаточно много памяти (примерно размер файла .ASE) для массивов вершин, текстурных координат, нормалей. Если функция не сможет выделить необходимую память, она вернёт - GL_MODELNOMEMORY. После завершения загрузки модели память будет освобождена. Вторым параметром функции передаётся указатель на переменную куда будет сохранён номер полученного display list`а. В этом листе будут сохранены координаты вершин, нормалей, текстурные координаты и свойства материала модели. Пример:Сначала следует загрузить модель: #include "glModelUt.h" // Также стоит подключить к проекту файл glModelUt.cpp GLuint list_num; int error=glLoadModel("my_model.ase",&list_num); if(error!=GL_MODEL_OK) {printf("Some error appeared.\n");return;} Далее загруженную модель можно использовать: glCallList(list_num);
5. Платформы.Написана функция под Windows с использованием Visual C, но должна работать на любой платформе с поддержкой OpenGL, т.к. использованы только средства Ansi C.
6. Автор.Функцию и этот текст написал Я, Горкуша Роман в 1999 году. Использовать функцию можно без ограничений и уведомлений. Возникшие вопросы и предложения - на мой e-mail: karroplan@mail.ru. 7. Файлы.glmodelmt.cpp, glmodelut.h - собственно исходник той функции о которой идёт речь в 3DSModelling.html sample.cpp - пример использования функции(под Win32). sample.exe - он же, но скомпиленный. sample.ase - модель для примера(надпись OpenGL). |