То, как эти данные будут храниться, как правило, описывается спецификацией для данного формата.
Метод хранения геометрии в сторонних файлах, безусловно, очень удобен. Имея класс загрузки трехмерных объектов, мы можем на ходу менять геометрию сцены, меняя файл с описанием трехмерного объекта.
Принцип хранения геометрии 3D-объекта сводится к тому, что объект состоит из N узлов, каждый из которых является составляющей общей сцены. Узел (или подобъект) представляет собой набор координат в трехмерном пространстве. По сути, представление такого объекта можно разделить на два больших массива. Ведь соседние полигоны, как правило, используют минимум одну общую вершину.
Исходя из этого, хранить координаты отдельно для каждого полигона - абсолютно не выгодно. Отсюда и появляются два геометрических массива. Первый содержит описание всех вершин. Второй массив содержит описание полигонов – каждый полигон описывается 3 индексами координат, которые мы должны взять из первого массива.
Загрузку трехмерной модели мы рассмотрим на примере формата ASE. В данный формат можно легко сохранить трехмерную модель, используя пакет трехмерного моделирования 3D Studio Max. Формат является текстовым, и вы можете самостоятельно изучить то, как описывается экспортируемая геометрия.
Так как мы реализуем загрузку трехмерной модели для обучения, мы не будем использовать многие параметры, хранящиеся в данном файле. Нормали мы посчитаем самостоятельно. Также мы загрузим текстурные координаты для загрузки текстуры, наложенной на объект.
Экспорт данных из 3D Studio Max
Итак, для примера создадим в 3D Studio Max модель чайника (ее тоже можно отрисовать, используя библиотеки OpenGL, но в данном случае мы выбираем данную 3D модель, чтобы не делать сильный акцент на создание самой 3D модели для демонстрации алгоритма загрузки 3D модели).
Создайте новую модель чайника и куб. С помощью редактора материалов назначьте данным объектам текстуры.
Рисунок 1. Трехмерная сцена для экспорта.
Теперь воспользуйтесь меню File -> Export. В качестве формата установите формат ASE (рис. 3). При настройках экспорта необходимо указать, что мы экспортируем исключительно геометрию.
Рисунок 2. Экспортирование сцены.
Рисунок 3. Настройки экспорта трехмерной модели.
Теперь можно перейти к созданию класса для загрузки 3D-модели, после чего мы подключим его к оболочке, разрабатываемой в главе 11.