Преобразование файла .obj в файл заголовка модели OpenGL - индексы и f параметры? - PullRequest
1 голос
/ 09 октября 2010

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

static const float modelVertices[NUM_OBJECT_VERTEX * 3] = {}

static const float modelTexCoords[NUM_OBJECT_VERTEX * 2] = {}

static const float modelNormals[NUM_OBJECT_VERTEX * 3] = {}

static const unsigned short modelIndices[NUM_OBJECT_INDEX] = {}

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

Кажется простым преобразовать v, vt, vn файла .obj в вышеуказанный формат. В моем файле .obj также есть набор f, которые содержат триплеты, разделенные /. Я не уверен, что именно эти параметры ...

Какие параметры мне нужно преобразовать, чтобы получить четвертый - modelIndices?

(Мне нужно заранее признать, что я новичок в OpenGL, поэтому извиняюсь, если это покажется слишком элементарным!)

1 Ответ

1 голос
/ 09 октября 2010

Тройняшки - это просто определение лица.

Если у вас есть f 1 2 3

Это означает, что у вас есть треугольник, который состоит из вершин индексов 1 2 и 3.

Если все записи одинаковы, это означает, что вы можете напрямую заполнить свой modelIndices этими индексами и нарисовать их, используя GL_TRIANGLES.

Теперь, если они разделены /, это означает, что у вас есть различное отображение между положением вершин и координатами текстуры и / или нормалями.

Это что-то OpenGL не может обработать напрямую , и вам нужно будет разбить текстовую строку и обычные данные на массивы того же размера, что и массив позиции вершины.

Сделать это тривиально: вот псевдокод:

read face data (triplets)
for each triplet
   read vertex indice
   read texcoord and normal indices
   fetch texcoord @ texcoord indice from your vt array
   store texcoord @ vertex indice in your modelTexCoords array
   fetch normal @ normal indice from your vn array
   store normal @ vertex indice in your modelTexCoords array

   etc

См. Также документ из Википедии, который хорошо объясняет формат .obj: http://en.wikipedia.org/wiki/Obj

...