Использование моделей из 3DStuido Max

Оглавление.

  1. Введение.
  2. Получение файла модели.
  3. Ограничения.
  4. Прототип функции.
  5. Платформы.
  6. Автор.
  7. Файлы.

1.  Введение.

   Почти в любой программе, так или иначе связанной с трёхмерной графикой, используется некоторое количество практически не изменяющихся объектов (моделей). Наиболее удобно такие объекты создавать с помощью редакторов трёхмерной графики, вроде 3DStudio MAX, SoftImage, Maya и т.д. Далее в этом тексте речь пойдёт об изпользовании моделей сделанных именно в 3DStudio MAX версий 2, 2.5 и 3.

2. Получение файла модели.

    Наиболее удобным для понимания и работы мне показался файл формата .ASE (один из форматов экспорта в 3DStudio MAX). Получить такой файл очень просто:

    Закончив создание модели откройте меню "File". В нём есть пункт - "Export Selected", в появивщемся дилоговом окне выберете тип файла - .ASE. Повится диалог с опциями экспорта:

exportdlg.jpg (83450 bytes)

    Установите следующие опции (как на картинке) - 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).