Я делаю импортером 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, чтобы они работали для любого меша? Спасибо!
В файле должно быть несколько «граней» линий (строки, начинающиеся с буквы «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
Других решений пока нет …