Процедура альфа-смешения текстурированных квадратов в OpenGL 3+? - PullRequest
1 голос
/ 28 июля 2011

Я пытаюсь собрать простую программу, которая просто отображает два текстурированных четырехугольника, перекрывающих друг друга, и текстуры имеют альфа-каналы.

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

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

Я точно знаю, что альфа корректно отображается, поскольку, если я установлю out_color = texture.aaaa, я получу хороший образец черного / белого/ grays, которые соответствуют исходной текстуре.

Итак, если GL_BLEND не работает, каковы обычные методы для получения альфа-смешивания?

1 Ответ

3 голосов
/ 28 июля 2011

Все, что glEnable(GL_BLEND) делает, это включает и выключает смешивание.Это не говорит, что сделает смешивание;это контролируется различными функциями смешивания .Если вы хотите типичную альфа-прозрачность, вы делаете это:

glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD);
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO);

Если вы используете предварительно умноженную альфа (и вы, вероятно, должны), вы должны сделать:

glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD);
glBlendFuncSeparate(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...