#c #opengl #bsp
#c #opengl #bsp
Вопрос:
В настоящее время я пытаюсь преобразовать другой формат в формат Quake 3 BSP. Формат Quake включает в себя вершины, грани, обозначения и текстуры.
Из информации, с которой мне приходится работать:
У меня есть вершины, которые представляют собой 3 структуры с плавающей запятой для местоположения x, y и z.
У меня есть полигоны, которые, как я мог бы предположить, являются гранями. Все полигоны треугольные и являются ссылками на индексы вершин и текстуры.
У меня текстуры отформатированы правильно.
Мои основные вопросы:
- Эквивалентны ли грани в формате BSP полигонам?
- Что такое обозначения в формате BSP? Они указывают на вершины или на нечто большее?
Ответ №1:
Формат BSP в Quake3 представляет все грани в виде треугольников (программисты иногда называют его «треугольным супом»). Это более эффективно для аппаратного рендеринга, чем формат Quake2, где грани могут быть полигонами с произвольными сторонами (3 вершины). Когда все грани являются треугольниками, вы можете нарисовать несколько граней одним вызовом, при условии, что эти грани используют один и тот же материал:
glDrawArrays(GL_TRIANGLES, first_face->index, num_faces);
Такое пакетирование геометрии дает значительное улучшение производительности по сравнению с Quake2, где, поскольку каждая грань может иметь разное количество вершин, грани нельзя объединить в отдельные операции рисования: вместо этого вы должны вызвать glDrawArrays (или, что еще хуже, glVertex3f в цикле) для каждого полигона. Это ключевое отличие заключается в том, почему среды Quake3 могут содержать в 10 раз большую сложность, чем Quake2.
В любом случае, имейте в виду, что индексы — это не просто индексы в группе вершин. Они также являются индексами в координатах текстуры как для каналов diffuse, так и для lightmap. Надеюсь, это поможет.