Лучший способ сделать альфа-смешивание с OpenGL? - PullRequest
1 голос
/ 29 июня 2010

Я рисую 2D-полигоны, на самом деле я рисую много треугольников и использую GLUOrtho2D. Я заметил, что при уменьшении я получил гораздо лучшую частоту кадров. Я понял, что максимально увеличиваю скорость заполнения видеокарты, не рисуя слишком много полигонов, как я изначально подозревал. Я думаю, это потому, что я рисую много перекрывающихся полигонов и использую

glEnable(GL_BLEND);

    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Это функция смешивания, которую я должен использовать? Как я мог минимизировать наполнение, учитывая характер того, что я делаю? Я попытался включить GL_DEPTH_TEST, и Z упорядочил мои полигоны, но, поскольку я смешиваю альфа, это не поможет. Какой самый эффективный способ сделать это?

Спасибо

Ответы [ 3 ]

3 голосов
/ 29 июня 2010

Я сомневаюсь, что использование другой функции наложения поможет.Обычно выбирается правильная функция смешивания на основе желаемого результата, а не производительности.

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

Также эти текстурированные полигоны?Возможно, вам удастся оптимизировать обработку текстур (например: уменьшить переключение контекста, использовать более эффективные форматы изображений и т. Д.).

Наконец, как вы визуализируете эти треугольники?Если вы работаете в непосредственном режиме или используете массивы вершин, рассмотрите возможность использования VBO.

2 голосов
/ 29 июня 2010

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

Единственное решение - использовать меньше смешивания и больше z-буферизации

0 голосов
/ 29 июня 2010

Изменение функции смешивания приводит только к изменению коэффициентов смешивания, но не в уравнении. В любом случае, современные видеокарты не используют жестко закодированные уравнения. Вы можете попробовать написать пиксельный шейдер , который удовлетворит ваши потребности.

Кстати, рассмотрите возможность использования VBO для своих "множества треугольников", если вы все еще этого не делаете.

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