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

时间:2012-03-28 18:58:08

标签: linux qt opengl opacity

在Qt中渲染具有部分不透明度的简单形状到QGLFrameBufferObjects时,我遇到了问题。

我已将问题简化为:

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

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

为什么我绘制的部分透明的东西在绘制到屏幕外缓冲区时会比我将它们直接绘制到屏幕上时更亮?必须有一些我必须在FBO上设置的状态,但我无法弄清楚它是什么。

1 个答案:

答案 0 :(得分:3)

Alpha并不意味着“透明”。它并不意味着任何。当给它一个时,它只占用一个意思。当您设置使用alpha来控制透明度的混合模式时,它只表示“透明”。因此,如果您没有set up a blend mode那个creates the effect of transparency,那么alpha就是另一个颜色组件,它将与帧缓冲区完全相同。