Создание многих полигонов с OpenGL идет медленно? - PullRequest
5 голосов
/ 23 мая 2010

Я хочу нарисовать много полигонов на экране, но я быстро замечаю, что он быстро замедляется. В качестве теста я сделал это:

for(int i = 0; i < 50; ++i)
{
        glBegin( GL_POLYGON);
        glColor3f( 0.0f, 1, 0.0f ); glVertex2f( 500.0 + frameGL.GetCameraX(), 0.0f + frameGL.GetCameraY());
        glColor3f( 0.0f, 1.0f, 0.0f ); glVertex2f( 900.0 + frameGL.GetCameraX(), 0.0f + frameGL.GetCameraY());
        glColor3f( 0.0f, 0.0f, 0.5 ); glVertex2f(900.0 + frameGL.GetCameraX(), 500.0f + frameGL.GetCameraY() + (150));
        glColor3f( 0.0f, 1.0f, 0.0f ); glVertex2f( 500 + frameGL.GetCameraX(), 500.0f + frameGL.GetCameraY());
        glColor3f( 1.0f, 1.0f, 0.0f ); glVertex2f( 300 + frameGL.GetCameraX(), 200.0f + frameGL.GetCameraY());
        glEnd();
}

Это всего лишь 50 полигонов, и это уже медленно. Я не могу загрузить их непосредственно на карту, потому что моя программа позволит пользователю изменять форму вершин.

Мой вопрос: как я могу ускорить это? Я не использую глубину. Я также знаю, что это не мои функции GetCamera (), потому что, если я создаю 500 000 полигонов, разбросанных по размерам, то у них просто не получается показать их в представлении. Если видеокарта может поддерживать 500 000 000 экранных полигонов в секунду, это должно быть просто, верно?

Спасибо

1 Ответ

14 голосов
/ 23 мая 2010
  1. как уже упоминалось, не делайте glBegin и glEnd в цикле, но вне
  2. для еще лучшей производительности используйте массивы вершин
  3. для оптимальной производительности используйте объекты буфера вершин

Решения упорядочены в зависимости от того, сколько выигрыша в скорости вы получите, и обратно, насколько широко они поддерживаются. Тем не менее, любая современная видеокарта поддерживает все это - вам просто нужно быть осторожным при кодировании для встроенных систем OpenGL.

Современные игры (те, которые достигают указанного вами лимита в 500kk), все используют как минимум VBO (если не Geometry Shaders, но это даже шаг за шагом). Чтобы эффективно изучить упомянутые методы, я честно предлагаю делать их шаг за шагом - например, сначала изучают списки отображения, затем массивы вершин, а затем VBO, потому что на практике каждый из них строится поверх первого.

Непосредственный режим (характеризующийся использованием команды GL на объект) является чрезвычайно медленным и даже не рекомендуется в текущем стандарте GL - короткая теория, потому что одна из самых дорогих графических операций (кроме манипулирования текстурой) Рисовать звонки - звонки между видеокартой и процессором - так что на практике лучше заранее подготовить все, что вы можете, и передать его в GPU за один звонок (или как можно меньше).

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...