我想在透明帧缓冲区上混合执行渲染。 所以通常是标准
SRCa * SRCrgb + (1 - SRCa) * DSTrgb
颜色混合效果很好,只要您假设目标alpha始终为1即可。 在透明的帧缓冲区上绘图会留下伪影,因为源颜色会与某种颜色混合在一起,而该颜色不会首先显示。
解决方案非常简单。我可以将目标颜色与目标Alpha相乘,因此,如果DSTa为零,则颜色不会变宽。 理想方程式如下:
SRCrgb * (1 - (1 - SRCa) * DSTa) + DSTrgb * (1 - SRCa) * DSTa
但是OpenGL不能让我轻松做到这一点。我真的对OpenGL混合感到失望。
是否存在某种OpenGL技巧,可以让我通过标准混合绘制透明帧缓冲区? (当然,我可以禁用混合,但是重点是使其也与填充的帧缓冲区一起使用;缓冲区的内容不确定,它可能是透明的,可能不是。)
我只有两个想法,那就是绘制透明帧缓冲区后面显示的内容。这将导致更多的问题,而不是要解决的问题。 另一种方法是使用片段着色器执行这种混合,不幸的是这很麻烦。
还有其他方法吗?