【发布时间】:2015-04-23 08:26:48
【问题描述】:
我正在渲染绿色文本,其中一些是模糊的,并带有纯蓝色背景。透明度功能按预期工作,但我在文本的模糊区域看到一个黑色的“光环”。我花了几天时间阅读文章并尝试不同的解决方案,但无济于事。
前景图像用纯绿色 (0,0,1) 填充,Alpha 通道是定义文本和透明度的地方。
访问http://www.andersriggelsen.dk/glblendfunc.php 网站并输入以下两个图片网址,即可轻松演示我的问题:
前台:http://troikatronix.com/files/text320x240.png
背景:http://troikatronix.com/files/solid-blue.png
这张图片显示了设置和生成的带有暗光晕的图像。
为了深入了解这一点,我编写了一个调试函数来在每一层渲染后读回后台缓冲区。从数值上看,数学结果都是正确的。
例如,如果我以 10% 渲染预乘源图像的实心部分(例如,在预乘 10% 之前,源是 rgba[0, 0, 255, 255])并使用 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)是这样的
bkg = rgba[0, 0, 255, 255]
src = rgba[0, 25, 0, 25]
result = rgba[0, 25, 230, 255]
但是当你看到它时,你基本上会得到一个深蓝色而看不到绿色,如图所示
那么我做错了什么?或者这是某种伽玛/颜色匹配问题,绿色的增加不像蓝色的减少那样明显?
【问题讨论】:
-
考虑
glBlendFuncSeparate(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); -
Andon:你的两个建议都会产生相同的视觉效果。存在相同的蓝色光晕。
标签: opengl alphablending