glDrawElements - как он «потребляет» индексы? - PullRequest
2 голосов
/ 09 февраля 2012

Мне интересно, как glDrawElements использует свои индексы.Допустим, у меня есть массив индексов {1, 2, 3, 4, 5, 6}, нарисованный GL_TRIANGLES.Мой вопрос в том, образует ли он 2 треугольника по индексам «123», «456» или 4 треугольника «123», «234», «345», «456».Я импортирую модель .obj, данные загружаются так, как должны, но рендеринг просто портится.

Ответы [ 2 ]

4 голосов
/ 09 февраля 2012

В режиме GL_TRIANGLES ему нужно 3 вершины для каждого треугольника, поэтому он будет тянуть по 3 индекса одновременно (поэтому он будет рисовать два треугольника с индексами 1,2,3 и 4,5,6).

Различные цифры применяются, если у вас есть смежность или вы нарисовали треугольник полоса , конечно.

Кроме того, поскольку вы упомянули, что импортируете файл OBJ, учтите, что в файле OBJ могут быть различные индексы для вершин, координат текстуры и / или нормалей.
Это не ошибка, а особенность. Это допустимо в OBJ, и многие экспортеры делают это, когда поверхности имеют гладкое затенение (то есть две грани имеют общую нормали) для экономии места.
Вы должны составить список уникальных вершин, каждая из которых имеет свою собственную нормаль, texcoord и т. Д. И использовать для них индексы.

4 голосов
/ 09 февраля 2012

Если вы используете GL_TRIANGLES, это будет 123, 456. Если вы используете GL_TRIANGLE_STRIPS, это будет 123, 234, 345, 456.

...