2012-03-20 74 views
1

我正在努力在OpenGL中创建一个透明的GUI,并且试图通过一些半透明的四边形渲染文本,但结果很奇怪。OpenGL:奇怪的透明度混合结果

如果我呈现本身的文本,它背后没有什么,它看起来罚款:

Text without transparent background

但是,如果我使其背后半透明四(渲染文本之前渲染的四),我得到这个:

Text with transparent background

我有混合设置为(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)。字体纹理是具有alpha通道中的字符形状的全白纹理。

在透明度的现有层上执行透明度时,我是否需要做一些特殊的事情?还是有什么我需要检查?

+2

你确定alpha在每个字母周围都是零吗? – 2012-03-20 20:31:19

+0

+1 to @Nicol Bolas的建议。例如,你的源图像可能没问题,但你的图像加载器可能会搞砸了。 – 2012-03-20 20:49:58

回答

0

你的字体纹理的alpha值似乎是关闭的。对于你想要看不到的纹理元素应该是0,对于可见的纹理元素应该是1(或255字节)。你应该检查纹理并确保alpha值是正确的。

除了alpha混合,您可以使用alpha测试。这将完全摆脱片段,其alpha值低于某个阈值,并且通常比混合更快。

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

这可能工作,即使你的纹理的Alpha关闭在一些地方,但看起来并不像它在这里的话,作为“s”和“T”似乎在地方低阿尔法它应该是1.

0

感谢您的回复。我的字体纹理没有错,但是你的建议让我尝试了其他一些东西。原来问题不是透明度。渲染背景四边形时出现问题,导致它也渲染文本四边形,但使用背景纹理。 Bah ...