Создание многих полигонов с OpenGL является медленным?

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

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 полигонов, и уже это - медленный gtting. Я не могу загрузить их непосредственно на карту, потому что моя программа позволит пользователю изменять verticies.

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

Спасибо

5
задан jmasterx 23 May 2010 в 15:20
поделиться

1 ответ

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

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

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

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

Удачи!

15
ответ дан 18 December 2019 в 11:54
поделиться