На практике большинство граней волнового фронта являются копланарными и выпуклыми, но я не могу найти ничего в оригинальной спецификации OBJ , говорящей, что это гарантировано.
Если грань копланарная и выпуклая, вы можете использовать GL_TRIANGLE_FAN или GL_TRIANGLE и вручную оценить вентилятор. Веер имеет все треугольники, разделяющие первую вершину. Как это:
// manually generate a triangle-fan
for (int x = 1; x < (faceIndicies.Length-1); x++) {
renderIndicies.Add(faceIndicies[0]);
renderIndicies.Add(faceIndicies[x]);
renderIndicies.Add(faceIndicies[x+1]);
}
Если количество вершин в n-угольнике велико, использование GL_TRIANGLE_STRIP или ручное формирование собственных треугольных полос может привести к лучшим визуальным результатам. Но это очень редко встречается в OBJ-файлах wavefront.
Если грань копланарная, но вогнутая, то вам нужно триангулировать грань с помощью алгоритма, такого как метод обрезания ушей.
http://en.wikipedia.org/wiki/Polygon_triangulation#Ear_clipping_method
Если вершины не копланарны, вы ввернуты, потому что OBJ не сохраняет достаточно информации, чтобы знать, какая форма тесселяции была предназначена.