我正在使用Qt5及其OpenGL集成,并且在尝试绘制半透明物体时遇到问题。当一个对象是半透明的时候,在我的OpenGL窗口后面可见的任何东西都会显示在该对象的屏幕区域内,而不是与已存在于颜色缓冲区中的对象混合。我已经开始通过我的半透明物体观看YouTube视频,因为无论显示的是现场直播。Qt OpenGL - 半透明物体显示窗口后方的内容
有趣的是,最看穿物体变得似乎在半透明度出现 - 完全不透明使得它坚实的,而零不透明度呈现什么都没有(和任何以前在3D的背景场景仍然在那里)。最后渲染半透明物体并不能解决问题。
我注意到,当我在纹理上启用mipmap时,也会发生这种情况 - 随着物体上某个点的距离增加,相关像素变得更加半透明并显示OpenGL窗口后面的任何内容。这个问题出现在我的Windows和OSX机器上。
这是一个已知的问题?有没有解决方法?谷歌没有证明太有帮助。
你说的像素格式是正确的 - 我将默认格式设置为使用8位阿尔法缓冲区,并且输出的是我的分片代码中输入的任何alpha值的颜色。它看起来像是设置窗口帧缓冲区的alpha值,这意味着从后面的东西显示通过。我是否认为这意味着OpenGL混合函数只使用输入alpha来计算最终的RGB颜色,因此我不需要从片段着色器中写入该alpha? – x6herbius
@ x6herbius:您可以配置OpenGL如何使用'glBlendFunc'或'glBlendFuncSeparate'使用源(传入像素)和目标(帧缓冲中已存在的内容)alpha值 - 完全可以使用目标alpha进行计算。但是,在主要帧缓冲区上使用这种情况的情况很少(这对于创建中间图像来说是非常有意义的)。 – datenwolf