Сначала это казалось очевидным ... Делайте по 2 треугольника на каждую грань, где бы ни было найдено 4 индекса, не так ли?
Имеется в виду следующее:
v 1.000000 1.000000 0.000000
v -1.000000 1.000000 -0.000000
v 1.000000 -1.000000 0.000000
v -1.000000 -1.000000 -0.000000
f -4 -3 -2 -1
..., в свою очередь, необходимо преобразовать во что-то вроде:
v 1.000000 1.000000 0.000000
v -1.000000 1.000000 -0.000000
v 1.000000 -1.000000 0.000000
v -1.000000 -1.000000 -0.000000
f -4 -3 -2
f -2 -3 -1
Этот конкретный пример, конечно, будет отображен правильно.
Однако не все случаи так просты, как разделение грани на две грани (где первая грань содержит первые три вершины исходной грани, а вторая грань содержит последние 3 вершины, как в примере выше). Возьмем, к примеру, следующий куб:
v 0.000000 1.000000 1.000000
v 0.000000 0.000000 1.000000
v 1.000000 0.000000 1.000000
v 1.000000 1.000000 1.000000
v 0.000000 1.000000 0.000000
v 0.000000 0.000000 0.000000
v 1.000000 0.000000 0.000000
v 1.000000 1.000000 0.000000
f 1 2 3 4
f 8 7 6 5
f 4 3 7 8
f 5 1 4 8
f 5 6 2 1
f 2 6 7 3
Эти грани нельзя разделить так же, как в предыдущем примере ... Итак, мне нужно было бы каким-то образом узнать, как разбить четырехугольную грань на две треугольные грани, используя при этом индексы правильные для второй лицо...
Как этого достичь? Обратите внимание, что я НЕ использую конвейер с фиксированными функциями, и поэтому использование GL_QUADS НЕ является вариантом. Мой движок рендеринга в значительной степени привязан к использованию только GL_TRIANGLES.