Как построить сетку из набора вершин

Я делаю импортер OBJ и зацикливаюсь на том, как построить сетку из набора заданных вершин. Рассмотрим куб с этими вершинами (формат OBJ, грани - треугольники:

v -2.767533 -0.000000 2.927381

v 3.017295 -0.000000 2.927381

v -2.767533 6.311718 2.927381

v 3.017295 6.311718 2.927381

v -2.767533 6.311718 -2.845727

v 3.017295 6.311718 -2.845727

v -2.767533 -0.000000 -2.845727

v 3.017295 -0.000000 -2.845727

Я знаю, как создавать сетки с использованием GLUT (для выполнения моих вызовов GlBegin (GL_TRIANGLES), glVertex3f (x, y, z), glEnd () и т. Д.). Просто я не знаю, как объединить вершины для воссоздания. объект. Я думал, что нужно перейти к v1, v2, v3, затем к v2, v3, v4 и т. Д., Пока я не сделаю достаточно треугольников (и что-то вроде v7, v8, v1 (потому что это восходит к началу)). Итак, 8 вершин - это 12 треугольников для куба, а для, скажем, сферы со 108 треугольниками и 56 вершинами это (56 вершин * 2) - 4. Для куба я делаю 12 треугольников, это нормально, но для сферы, Я делаю 108 треугольников с 56 вершинами, это не работает. Итак, как мне объединить вершины в моих вызовах glVertex, чтобы заставить его работать с любой сеткой? Спасибо!


person user2671156    schedule 13.12.2013    source источник
comment
есть библиотеки, которые сделают это за вас assimp.sourceforge.net ...   -  person user2485710    schedule 13.12.2013


Ответы (1)


В файле должна быть группа строк "лица" (строки, начинающиеся с буквы "f"), которые рассказывают вам, как объединить вершины в объект. Например,

f 1 2 3

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

f 1/1 2/2 3/3

который представляет собой треугольник, который также включает координаты текстуры,

f 1//1 2//2 3//3

который включает в себя векторы нормалей вершин, или

f 1/1/1 2/2/2 3/3/3

который включает в себя оба.

В Википедии есть статья с обзором формата: https://en.wikipedia.org/wiki/Wavefront_.obj_file

person Mark    schedule 13.12.2013
comment
Хорошо, это решает. Я работал над частями файла по одной части за раз, как будто я начинал с вершин, а затем работал с координатами текстуры. Как объяснила википедия, мне было непонятно, что мне нужно использовать определения вершин и граней вместе. - person user2671156; 13.12.2013