OpenGL:奇怪的透明度混合结果

时间:2012-03-20 16:41:35

标签: opengl alphablending

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

如果我单独渲染文本,背后没有任何内容,它看起来很好:

Text without transparent background

但是,如果我在它后面渲染一个半透明四边形(在渲染文本之前渲染四边形),我明白了:

Text with transparent background

我将混合设置为(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)。字体纹理是全白纹理,字母形状位于Alpha通道中。

在现有的透明层上执行alpha透明度时,是否需要做一些特别的事情?或者我需要检查一些其他内容吗?

2 个答案:

答案 0 :(得分:0)

字体纹理的alpha值似乎已关闭。对于您想要隐身的纹素,它应为0;对于可见纹素,它应为1(或255个字节)。你应该检查纹理并确保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'似乎在应该是的地方有低alpha值1。

答案 1 :(得分:0)

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