Формат BSP Quake3 представляет все грани в виде треугольников (иногда программисты называют их «супом треугольника»). Это более эффективно для аппаратного рендеринга, чем формат Quake2, где грани могут быть произвольно расположенными многогранниками (3+ вершины). Когда все грани являются треугольниками, вы можете нарисовать несколько граней одним вызовом, при условии, что эти грани используют один и тот же материал:
glDrawArrays(GL_TRIANGLES, first_face->index, num_faces);
Эта группировка геометрии дает массивное улучшение производительности по сравнению с Quake2, где, поскольку каждое лицо может иметь различное количество вершин, грани не могут быть объединены в одну операцию рисования: вместо этого вы должны вызвать glDrawArrays (или хуже , glVertex3f в цикле) для каждого многоугольника. Это ключевое отличие, поэтому среда Quake3 может содержать в 10 раз сложнее, чем Quake2.
В любом случае, имейте в виду, что индексы - это не просто индексы в вершине. Они также являются индексами в текстурных координатах для каналов diffuse и lightmap. Надеюсь, это поможет.