Лучший метод для обработки вершин в OpenGL? C++
Я реализую рендер карты для Quake. Я в настоящее время бегаю по массивам вершин и отправляю их по одному за раз. Мне сказали, что с помощью массивов вершин я могу значительно ускорить процесс рендеринга, отправляя вершины в пакете. Теперь я только что посмотрел на списки отображения и, наконец, объекты VBO или буфера вершин. VBO упоминает большое преимущество в отношении связи клиент / сервер. Если я просто собираюсь разрабатывать клиент, а не сервер, VBO по-прежнему применимо к тому, что я делаю?
Какие игры используются в настоящее время в спектре OpenGL для быстрой обработки вершин?
2 ответа
Когда они говорят "клиент / сервер", они не говорят об интернет-сети.
- Клиент = ЦП
- Сервер = аппаратное обеспечение GFX
Это две отдельные части оборудования. Хотя они (обычно) подключены к одной и той же материнской плате, им все равно необходимо общаться друг с другом. Графическая карта обычно не имеет доступа к основной памяти на материнской плате, поэтому вершины (а также текстуры, индексы и т. Д.) Необходимо отправлять на графическое устройство.
Краткая история: Используйте объекты Vertex Buffer. Для статических данных (например, карты Quake) нет ничего лучше. Вершины отправляются на графическое устройство (сервер) один раз и остаются там. Когда вы рисуете вещи вершина за вершиной (используя что-то вроде glBegin(GL_TRIANGLES)
) вершины передаются через каждый кадр, что, как вы можете себе представить, довольно неэффективно.
VBO - современный ответ.
Не поймите неправильно термины "клиент" и "сервер" в смысле OpenGL. В этом нет разницы между Apache (HTTP-сервер) и Chrome (HTTP-клиент, между прочим). С точки зрения OpenGL, клиент - это вы / ваш код. Сервер является графическим драйвером / оборудованием.
VBO позволяют хранить информацию о вершинах на графическом оборудовании, что позволяет избежать отправки каждой вершины на карту каждый раз, когда вы ее используете. Это огромное преимущество.
Вы спрашиваете об обработке вершин, но чтобы ответить на ваш вопрос, нам нужно уточнить, что вы имели в виду. Если вы хотите получить вершины для видеокарты, ответ - VBO. Если мы говорим о манипулировании данными вершин, это может быть эффективно достигнуто с помощью шейдеров.