Изменение моего преобразованного файла .obj в примитивы OpenGL

Я создал дом в Blender и экспортировал его в файл .obj. Затем я использовал 3DWin, чтобы преобразовать это в scene.cpp. Я смущен тем, как я могу импортировать эти данные в свой код, чтобы отобразить дом.

Теперь у меня есть массив сетки с моими координатами, который выглядит следующим образом

static float mesh01_coords[] = {
50, 0.1, 50,
-50, 0.1, 50,
-50, 0.1, -50,
50, 0.1, -50,
...

Я просто перебираю каждый индекс массива, устанавливая вершину в каждой точке? Такие как:

glVertex3f(50, 0.1, 50);
glVertex3f(-50, 0.1, 50);
glVertex3f(-50, 0.1, -50);
glVertex3f(50, 0.1, -50);

person thesentyclimate413    schedule 06.12.2011    source источник
comment
Я не знаю 3DWin, поэтому я не уверен, какой тип cpp он генерирует. Но почему бы не написать простой загрузчик OBJ самостоятельно, сгенерировав сетку, которую можно будет визуализировать. Это не так уж сложно, и вам не нужно проходить какой-то конвертер.   -  person Bart    schedule 06.12.2011


Ответы (2)


Затем я использовал 3DWin, чтобы преобразовать это в сцену.cpp

Нет смысла делать это. Это просто раздует ваш исполняемый файл, и если вы внесете какие-либо изменения в модель, вам придется перекомпилировать вашу программу.

Просто прочитайте файл OBJ напрямую. Написать парсер для него довольно просто http://www.royriggs.com/obj.html

Я смущен тем, как я могу импортировать эти данные в свой код, чтобы отобразить дом.

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

person datenwolf    schedule 06.12.2011
comment
+1 к ответу, но, к вашему сведению, ссылка, которую вы вставили, приводит к предупреждению о вредоносном ПО в моей системе, когда я перехожу по ней. - person Bart; 06.12.2011
comment
@Bart: Понятия не имею, откуда могло прийти это предупреждение о вредоносных программах. Сайт представляет собой простой HTML, без скриптов, без CSS. Вероятно, это результат какого-то чрезмерно увлеченного классификатора URL. - person datenwolf; 06.12.2011

Прежде всего - спецификация OBJ. Теперь вы можете либо реализовать это самостоятельно, либо использовать библиотеку, которая предоставит вам эту функциональность.

В DirectX SDK есть образец под названием MeshFromOBJ; он основан на C++ и, насколько я помню, обеспечивает хороший опыт обучения. По сути, все, что вам нужно сделать, это преобразовать вызовы Direct3D (их не так много) в вызовы OpenGL. На gamedev.net есть тема, которая может помощь.

В качестве альтернативы найдите библиотеку, которая сделает это за вас. Попробуйте Google. Один из результатов, который я нашел, был GLM.

person gwiazdorrr    schedule 06.12.2011