Я делаю несколько тестов OpenGL (2.1), и, пытаясь создать простой куб, мне было интересно, как создавать сложные сетки. Для моего куба я просто вручную устанавливаю каждую вершину с помощью GL_TRIANGLES
, Но я не знаю, как сделать то же самое внутри цикла, например. Из-за порядка вершин и потому что есть много повторяющихся вершин!
Мне действительно нужно сделать лицо, установив 3 вершины «один раз» (для обоих треугольников)? Это кажется таким медленным. Как оптимизировать?
Каковы методы создания / загрузки сеток?
О, я был бы признателен за пример.
Книга Джейсона Грегори «Архитектура игрового движка» содержит ответ на ваш вопрос. Вот что это говорит:
Самый простой способ определить меш — это скопировать вектики в группы
три […] Эта структура данных известна как список треугольников. […] Вы, вероятно, заметили, что многие вершины были продублированы, часто многократно […]. По этой причине большинство движков используют более эффективную структуру данных, известную как индексированный список треугольников.
Идея индексированных списков треугольников состоит в том, чтобы хранить вершины в отдельном буфере вершин, а индексы — в отдельном буфере индексов.
В этой же главе также рекомендуется использовать треугольные полосы (GL_TRIANGLE_STRIP
) и фанаты (GL_TRIANGLE_FAN
)
Учебник по индексированию объектов буфера вершин можно найти Вот
Других решений пока нет …