OpenGL: странный результат смешивания прозрачности - PullRequest
1 голос
/ 20 марта 2012

Я работаю над созданием прозрачного графического интерфейса в OpenGL и пытаюсь визуализировать текст в некоторых полупрозрачных квадратах, но результаты странные.

Если я отрисовываю текст сам по себе, ничего не скрывая, он выглядит нормально:

Text without transparent background

Однако, если я отрисовываю полупрозрачный квад за ним (рендеринг квада до рендеринга текста), я получаю это:

Text with transparent background

У меня установлено смешение (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA). Текстура шрифта представляет собой полностью белую текстуру с формами символов в альфа-канале.

Нужно ли делать что-то особенное при выполнении альфа-прозрачности над существующим слоем прозрачности? Или мне нужно еще что-нибудь проверить?

Ответы [ 2 ]

0 голосов
/ 21 марта 2012

Спасибо за ответы.В моей текстуре шрифта не было ничего плохого, но ваши предложения заставили меня попробовать несколько других вещей.Оказывается, проблема не в прозрачности вообще.Возникла проблема с рендерингом четырехугольников фона, из-за чего он также отображал четырехугольники текста, но с использованием текстуры фона.Ба ...

0 голосов
/ 21 марта 2012

Альфа-значение вашей текстуры шрифта, кажется, выключено. Это должно быть 0 для текселей, которые вы хотите сделать невидимыми, и 1 (или 255 в байтах) для видимых текселей. Вы должны проверить текстуру и убедиться, что значения альфа верны.

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

glDisbale(GL_BLEND);    
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.96f); // Or some fitting threshold for your texture

Это может сработать, даже если в некоторых местах альфа вашей текстуры отключена, но не похоже, что это так, как здесь, так как 's' и 't', кажется, имеют низкую альфа в тех местах, где это должно быть 1.

...