Qt OpenGL - 半透明对象显示窗口后面的内容

时间:2016-02-06 20:02:08

标签: c++ qt opengl

我正在使用Qt5及其OpenGL集成,当我尝试绘制半透明对象时遇到了问题。当一个对象是半透明的时,在我的OpenGL窗口后面可见的任何东西都显示在该对象的屏幕区域内,而不是与已经在颜色缓冲区中的任何东西混合的对象。我已经开始通过我的半透明物体观看YouTube视频了,因为无论是通过直播还是现场直播。

Translucency

有趣的是,最透明的物体看起来似乎发生在一半不透明度 - 完全不透明度使其变得坚固,而零不透明度根本不呈现任何东西(以前在3D场景的背景中保留的任何东西都保留在那里)。最后渲染半透明对象并不能解决问题。

我注意到当我在纹理上启用mipmap时也会发生这种情况 - 随着到对象上一个点的距离增加,相关像素变得更透明并显示OpenGL窗口后面的任何内容。我的Windows和OSX计算机上都会出现此问题。

这是一个已知问题吗?有解决方法吗?谷歌没有被证明太有帮助。

1 个答案:

答案 0 :(得分:1)

哈,这很有趣。我无法告诉你发生了什么,因为通常需要额外的努力才能使窗户真正透明;在Windows中,您必须选择具有Alpha通道的帧缓冲区格式并调用DwnEnableBlurBehindWindow来实际实现此效果。据我所知,Qt并没有这样做。

但如果它确实提供了一些提示:

  • 确保将帧缓冲区清除为alpha = 1
  • 渲染半透明对象时,请保持目标alpha值为1,即不要使用修改目标alpha值的混合模式和函数,或将其强制为1。

除了实现窗口半透明效果之外,主窗口帧缓冲区上的alpha通道几乎没什么用处。除非您需要这些,否则您应该为窗口帧缓冲区选择没有Alpha通道的像素格式,或者将其所有像素的alpha值保持为完全不透明度。