Main page   Download   Documentation   Coding   Site Map   Forum     Links   About

Использование моделей из 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).
© 1999-2000 Создание сайта «Веб-студия ITSoft»