Загрузка файлов трехмерных моделей в формате .X (DirectX)
Так как OpenGL - это кросс-платформенная библиотека, которая была написана для вывода графики, а не для работы с файловой системой и потоками, поэтому в ней нет встроенных решений для загрузки трехмерных объектов (Meshs) из файла.В это уроке будет подробно рассмотрен несложный способ загрузки файла в формате .X (DirectX). Для этого будет использована связка C# + Tao.Framework, поэтому желательно почитать пару уроков, как ее использовать.
Обратите внимание!
После установки Tao все библиотеки из C:\Program Files\TaoFramework\lib нужно скопировать в C:\Windows\System32, иначе библиотек не будет в системе, а Visual Studio не будет их видеть.
.X файл - формат файла для хранения 3D-объектов (Meshs). Файл может быть записан как текстовый - ".X" или бинарный - ".bin".
Формат X хранит информацию 3D-объекта:
- координаты вершин (Vertex), последовательность их загрузки (Face);
- координаты нормалейv(Vertex), последовательность их загрузки (Face);
- текстурные координаты, описание материалов и названия текстур.
Normals - это вектор направленный вверх от полигона, предназначенный для расчета света.
Полигон - это простая фигура сложенная в трехмерном пространстве из Vertex-ов.(например: треугольник, прямоугольник).
Вот выглядит простой куб, экспортированный в файл формата .X с помощью CyberMotion 3D-Designer (v12.0):
Код:
|
А вот выглядит простой куб, но уже текстурированный (с материалами) в .X-файле, экспортированный с помощью CyberMotion 3D-Designer (v12.0):
Код:
|
Рассмотрев структуру файла внимательней, можно понять, какие слова являются ключевыми и как разграничиваются записи данных.
Загрузчик был специально создан под программу CyberMotion 3D-Designer, но CyberMotion 3D-Designer не совсем удобен, так как для его использования необходима лицензия.
Поэтому загрузчик был модифицирован для большей универсальности. Так что он сможет загружать .Х-файлы, экспортированные через Blender.
Единственное, что может показаться недостатком, так это то, что придется установить Python (точнее его интерпретатор).
Внимание! Данный загрузчик - пробный и не исключены ошибки и малопроизводительные решения.
Код загрузчика
Сначала создаем проект оконного приложения С#.
Добавим в References (ссылки) Tao.FreeGlut, Tao.DevIl, Tao.OpenGl, Tao.Platform.Windows.
Рисунок 1. Добавление библиотек в проект.
Подключим библиотеки (директива using):
Код:
|
Рисунок 2. Подключение библиотек.
Прописываем создание класса в Form1 (или как Вы его назвали) .cs:
Код:
|
Добавим глобальные переменные:
Код:
|
Первое, что необходимо нашему классу - это функция для получения первого слова в строке, а потом уже от полученного слова будут работать другие функции. Здесь лучше использовать вариант функции с классом загрузки .ASE файлов
Код:
|
Теперь, когда есть базовая функция, можем приступить к функции определения ключевых слов:
Код:
|
Напишем функцию открытия файла:
Код:
|
Создаем конструкторы класса:
Код:
|
Теперь создадим отдельные функции для загрузки определенных ключевыми словами (Mesh, MeshNormals, Material, MeshTextureCoords) данных и вложенных в них данных (Vertex, Face), но сначала создадим структуры, куда будем это все записывать:
Код:
|
Функции:
Код:
|
Теперь напишем функции для отрисовки геометрии, а также открытия и привязки текстуры:
Код:
|
Класс готов, для его теста нужна форма с OpenGL Control и паруой управляющих элементов.