Изменение моего преобразованного файла .obj в примитивы OpenGL - PullRequest
1 голос
/ 06 декабря 2011

Я создал дом в 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,
...

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

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

Ответы [ 2 ]

5 голосов
/ 06 декабря 2011

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

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

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

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

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

2 голосов
/ 06 декабря 2011

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

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

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

...