当渲染到QGLFrameBufferObject vs屏幕时,Alpha合成错误

问题描述:

我在使用Qty中的QGLFrameBufferObjects渲染部分不透明的简单形状时出现问题。当渲染到QGLFrameBufferObject vs屏幕时,Alpha合成错误

我已经下降减少了问题的:

当我使一个简单的四到QGLFrameBufferObject颜色设置为(1,0,0,.5),然后是的blit到屏幕上,我得到一个50%不透明度太浅的结果。如果我使用相同的颜色(实际上是相同的代码)直接在屏幕上绘制相同的四边形,我会得到正确的颜色值。如果我使用不透明度== 1.0渲染四边形,那么结果是相同的......在两种情况下,我都会得到完整的深红色。我已经通过buffer.toImage()。save(“/ tmp/blah.tif”)直接将缓冲区转储到磁盘来确认缓冲区中的颜色真的是错误的。

在这两种情况下,在执行操作之前,我已将输出缓冲区清除为(1,1,1,1)。

为什么绘制到屏幕外缓冲区时我绘制的部分透明部分比从屏幕右侧绘制时亮得多?必须有一些状态,我必须在FBO或什么,但我不知道它是什么。

Alpha并不意味着“透明”。它根本不意味着任何东西。当你给给它一个时,它只会占用一个含义。当您设置使用alpha控制透明度的混合模式时,它只意味着“透明”。所以如果你没有set up a blend modecreates the effect of transparency,那么alpha就是另一个颜色分量,它将被完全写入帧缓冲区。

+0

如果你说的确实是我的问题的根源,那么你说我的混合模式在绘制到屏幕时已经正确设置,而在绘制到屏幕外缓冲区时却没有。然而,这两种情况之间唯一的区别是我创建了一个屏幕外缓冲区并将其绑定到当前的上下文中。那么,什么可以解释我的混合模式在一种情况下是正确的,在另一种情况下是错误的是否存在特定于屏幕外缓冲区的混合模式,我需要独立于其余环境进行设置? – Steve 2012-03-28 20:03:18

+0

@Steve:'那么怎么解释我的混合模式在一种情况下是正确的,在另一种情况下是错误的。'你的代码有一个错误。但是你没有显示你的代码,所以我不能说。 – 2012-03-28 20:04:30