Что-то не так с использованием списков отображения в OpenGL для одного объекта? - PullRequest
3 голосов
/ 19 мая 2011

Прежде всего, я знаю, что списки отображений устарели в OpenGL 3.0 и удалены в 3.1.Но я все еще должен использовать их в этом университетском проекте, для которого используется OpenGL 2.1.

Каждая статья или учебник, который я читаю в списках отображения, использует их для какого-то объекта, который рисуется, например, несколько раздеревья.Что-то не так в создании одного списка для одного объекта?

Например, у меня есть объект (в формате .obj) для здания.Это конкретное здание нарисовано только один раз.Для базового анализа производительности у меня есть текущие кадры в секунду в строке заголовка окна.

Делая это так:

glmDraw(objBuilding.model, GLM_SMOOTH | GLM_TEXTURE);

Я получаю около 260 FPS.Если вы не относитесь к библиотеке GLM, функция glmDraw в основном выполняет несколько вызовов glVertex.

Но делает это так:

glNewList(gameDisplayLists.building, GL_COMPILE);
    glmDraw(objBuilding.model, GLM_SMOOTH | GLM_TEXTURE);
glEndList();

glCallList(gameDisplayLists.building);

Я получаю около 420FPS.Конечно, частота обновления экрана не обновляется так быстро, но, как я уже сказал, это простой и простой способ измерить производительность.

Для меня это выглядит намного лучше.

I 'Я также использую списки отображения, когда у меня есть какой-то тип объекта, который я повторяю много раз, например, защитные башни.Опять же, что-то не так делает для одного объекта или я могу продолжать делать это?

1 Ответ

1 голос
/ 19 мая 2011

Использование списков отображения для этого материала прекрасно, и до появления Vertex Arrays они были стандартом де-факто для размещения геометрии в быстрой памяти. У выставленных списков показа есть несколько интересных подводных камней. Например, в OpenGL-1.0 не было текстурных объектов; вместо этого размещение вызова glTexImage в списке отображения было способом эмулировать это. И это поведение все еще преобладает, поэтому связывание текстуры и вызов glTexImage в списке отображения будут эффективно инициализировать объект текстуры с тем, что было сделано при компиляции списка отображения, всякий раз, когда вызывается список отображения. С другой стороны, списки отображения не работают с массивами вершин.

TL; DR: Если ваша геометрия статична, вы не ожидаете перехода к ядру OpenGL-3 в любое время, и это дает вам огромное увеличение производительности (как это было для вас), тогда просто используйте их!

...