Получение базовых 3D-моделей в приложении OpenGL - PullRequest
4 голосов
/ 05 января 2010

Хорошо ... Я занимаюсь простым программированием на OpenGL ES, и когда я говорю простое, самое сложное, что я делаю, это не что иное, как прославленные скошенные кубы и L-формы. (Подумайте очень тетрис, но в 3D.) Однако получение всех этих данных вершин в приложение либо а) с ручным кодированием (UGH!), Либо b) сторонним игровым движком (double-UGH !!!), либо вы используете некоторые Сторонний импортер типов файлов. (Частично тьфу!)

С одним исключением.

Я использую на Mac программу под названием Cheetah3D, которая является довольно хорошим разработчиком моделей (не велика, но солидна ... хороша), и единственное, чего я не видел в других местах, - это возможность экспорта. Ваши модели прямо в заголовочные файлы c-ready. Он экспортирует все массивы для вас и даже дает код для их визуализации (хотя и в закомментированном блоке в качестве ссылки.)

Хотя это прекрасно для 90% того, что мы делаем, есть некоторые вещи, которые не может смоделировать, например, позволить мне указать одну и ту же вершину для двух разных граней, но использовать разные нормали для каждой ... или даже смешать плоские и изогнутые нормали (точнее, как они отображаются) в одной модели.

Обратите внимание, что эти функции легко описываются в файле .obj, поскольку ваши нормали и вершины находятся в разных массивах, которые вы можете легко указать вместе с гранями, но они не появляются в заголовочном файле таким образом.

ТАК ... файлы obj (или любой другой тип файла, который будет работать в этом отношении ...) лучший способ вставить его в ваш код?

Мысли

Ответы [ 4 ]

3 голосов
/ 07 января 2010

OBJ формат файла.

Любой, кто занимается 3D-работой, должен когда-нибудь написать obj загрузчик модели.

Это очень простой формат файла.

v
t
n
f

Где:

  • v - вершины.
  • t - это координаты текстуры.
  • n нормальный.
  • f это лицо.

Пример сегмента файла obj:

v 1.0 0.1 0.1
t 1.0 0.0
n 1.0 1.0
f 1/1/1 1/1/1 1/1/1

Все, что нужно, - это сохранить четыре набора из вышеперечисленного, а когда дело доходит до рендеринга грани вершины, использовать индекс и выполнять простой поиск. Простой ввод / вывод файла очень легко выполнить на любом языке, поэтому в целом использование файла obj довольно просто.

Естественно, недостатком obj-файлов является то, что они могут стать довольно большими. Лично я никогда не считал это проблемой, и часто беру формат файла obj за отправную точку и удаляю некоторые дубликаты, чтобы создать специальный формат файла специально для моего приложения.

2 голосов
/ 07 января 2010

Конечно, вы не хотите встраивать что-либо в ваш код, загрузка OBJ - хороший вариант, но разные моделисты могут иметь свои собственные реализации OBJ, так как нет официального стандарта для формата. Это просто, но я видел много ситуаций, когда приложение X не может загрузить OBJ из приложения Y. Поэтому, если вы когда-нибудь планируете создавать ресурсы из разных пакетов, взгляните на их выходные файлы OBJ, чтобы убедиться, что они следуют тем же соглашениям.

Лучшая документация OBJ файла, которую я нашел, находится здесь http://www.martinreddy.net/gfx/3d/OBJ.spec

Я обнаружил, что это хорошая отправная точка, но если ваше приложение становится более сложным, и вы начинаете углубляться в более сложные определения материалов в ваших объектах, то вы можете захотеть взглянуть на что-то более стандартизированное, например Collada - формат на основе XML (https://collada.org), который охватывает гораздо больше, но также будет сложнее загрузить в ваше приложение.

Кроме того, еще одним хорошим вариантом для создания файлов OBJ является Blender, свободно доступный и довольно надежный инструмент моделирования (http://www.blender.org).

2 голосов
/ 05 января 2010

OBJ-файлы использовались довольно исторически, и это не так сложно, если бы вы создали свой собственный импортер или, по крайней мере, импортер, который работает для простых моделей, которые вас интересуют. Просто начните обрабатывать вершины, цвета и нормали, и вы подойдете для простых моделей, которые вы описываете. Конечно, если вы попытаетесь читать произвольные файлы OBJ, это будет неприятно, но только не делайте этого. ; ^)

Вы, конечно, не хотите перекомпилировать каждый раз, когда изменяете свою модель, если я правильно читаю ваш комментарий cheetah3d. Это очень быстро утомительно.

1 голос
/ 07 января 2010

Я написал программу чтения / рендеринга для AC3D файлов, которая отлично работает на iPhone (OpenGL ES)

Не стесняйтесь взглянуть на это здесь .

Джефф Ламарш (Jeff Lamarche) также имеет загрузчик obj по адресу google code .

...