Внимание!
Эта публикация перенесена в раздел уроков по адресу Загрузка .X (DirectX) файлов в OpenGL.К ней прикреплена новая отдельная ветка комментариев форума, которую вы можетет найти после текста публикации.
Обсуждение публикации рекуомендуется вести по новому адресу, который указан выше.
Загрузка .X (DirectX) файлов в OpenGL
Загрузка трехмерных моделей
Для загрузки из файла трехмерных объектов (Meshs) в OpenGl , нет встроенных решений. Так, как OpenGL- это кросс-платформенная библиотека, которая была написана для вывода графики, а не для работы с файловой системой, потоками....
Поэтому хочу поведать, как грузить удобный, и простой для понимания загрузки, DirectX-совский .X файл. Мы будем использовать связку C# + Tao.Framework, поэтому желательно почитать пару уроков, как ее использовать.
[spoiler]
Небольшое отступление
Файлы трехмерных моделей в формате .X
.X файл - формат файла для хранения 3D объектов (Meshs). Может быть,как текстовый ".x",так бинарный ".bin".
Этот формат хранит информацию 3D объекта:
- координаты вершин(Vertex), последовательность их загрузки(Face);
- координаты нормалей(Vertex), последовательность их загрузки(Face);
- текстурные координаты, описание материалов, названия текстур.
Vertex - это точка в трехмерном пространстве, содержащая в себе координаты X Y Z.
Normals - это вектор направленный вверх от полигона, предназначенный для расчета света.
Полигон - это простая фигура сложенная в трехмерном пространстве из Vertex-ов.(например: триугольник, прямоугольник)
Вот выглядит простой куб в .X файл экспортированный CyberMotion 3D-Designer (v12.0):
А вот выглядит простой куб, но уже текстурированный(с материалами) в .X файле экспортированный с помощью CyberMotion 3D-Designer (v12.0):
Видя структуру файла, можно понять какие слова являются ключевыми и, как граничатся записи данных.
Я создавал загрузчик под определенную программу, а именно CyberMotion 3D-Designer, но CyberMotion 3D-Designer не удобен в плане необходимости лицензии.
Для того, чтобы не было мороки с малоизвестной всем программой, я модифицировал загрузчик для большей универсальности. Так, что он сможет грузит .x файлы экспортированные через Blender.
, его легко найти и скачать, он работает с многими известными форматами, и по нему много разной инфы и сайтов.
Единственное, что может показаться недостатком, так это то что придется установить Python(точнее его интерпретатор).
Сразу хочу предупредить, что этой мой пробный загрузчик и не исключены ошибки и малопроизводительные решения, а точнее должны быть)). Но как говориться: "нет программ без ошибок, просто плохо искали"))).
Код загрузчика
Приступим к делу. Сперва создаем проект оконного приложения С#.
- Добавим в references(ссылки) Tao.FreeGlut, Tao.DevIl, Tao.OpenGl, Tao.Platform.Windows

- Подключим библиотеки (директива using):

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

- Подключим библиотеки (директива using):
|

- Прописуем создания класса прям в Form1(или как Вы его назвали).cs
|
- Добавим целую кучи глобальных переменных
|
- Первое, что необходимо нашему классу (кроме глобальных переменных)) - это функция для получения первого слова в строке, а потом уже от полученного слова будут работать другие функции. Здесь можно, и лучше использовать вариант функции с класса загрузки .ASE файлов , но я решил написать свою функцию))) какую использовать решать Вам:
|
- Теперь когда есть базовая функция, можем приступить функции определения ключевых слов:
|
- напишем функцию открытия файла:
|
- создаем конструкторы класса
|
- теперь отдельные функции для загрузки определенных ключевыми словами(Mesh, MeshNormals, Material, MeshTextureCoords) данных и вложенных в них данных(Vertex, Face), но сначала создадим структуры куда будем это все записывать
структуры:
|
функции:
|
- теперь напишем функции для отрисовки геометрии; и открытия, привязки текстуры
|
Класс готов, для его теста нужна форма с Opengl Control-ом и пару управляющих элементов. и можно почитать как это сделать. В исходники выложены готовая форма с рабочим классом, и со всем необходим: x-файлами, текстурами. Статья была написана с трудом и без сна
При загрузке файла из примера-исходника подвигайте ползунки, т.к. размеры модели бывают разные, с ними иногда баг выходит не понятный))), но это не связано с загрузчиком, скорее с контролами.
Скачать исходные коды.
Надеюсь Вам пригодиться, в будущем планирую написать урок о сохранении Mesh в собственный двоичный формат и загрузки с него. Но это если этот урок хоть кому то пригодиться или следующий станет востребованный.
Внимание!
Эта публикация перенесена в раздел уроков по адресу Загрузка .X (DirectX) файлов в OpenGL.К ней прикреплена новая отдельная ветка комментариев форума, которую вы можетет найти после текста публикации.
Обсуждение публикации рекуомендуется вести по новому адресу, который указан выше.
2665
07.01.2011
20



.
Все сводится к разбору спецификации и написанию парсера.
А готовые решения (или база от чего оттолкнуться) — это гуд.
Любой формат которые удобнее, тот грузим. И принято или не принято, чтобы загружать Mesh в OpenGL надо самому искать решения этой задачи.
А можно поинтересоваться, что по Вашему мнению принято использовать с OpenGL?!
Благо к ним есть целый SDK с примерами, чем не мог похвастаться *.3ds.
MakeGlTexture(int Format, IntPtr pixels, int w, int h);//привязка текстуры
Функции открытия и привязки текстуры с , а загрузчик сам писал, отталкиваясь от примера — .
А что?
Можно создавать группы, темы на форуме и т.д. Полностью другой движок.
Но очень много нового функционала еще нет. Ну и много нвого есть =) Можно поделится впечатлениями.
Так теперь еще живая лента, чат и т.д. Есть плюшки интересные.
Буду ковырять на выходных и когда на работе скучно становится