为了通过在中间位置实际渲染来实现物理上精确的运动模糊,似乎要正确地执行此操作,我需要一个特殊的混合功能。添加剂混合仅适用于黑色背景,标准“透明度”函数(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
对于少量样本可能看起来不错,但它在物理上是不准确的,因为在最后渲染的样本将对结果颜色做出更多贡献。
我需要的功能是产生一种颜色,它是原始颜色和目标颜色的加权平均值,具体取决于覆盖片段的样本数量。但是我可以将其概括为更好地解释样本之间的渲染差异:假设我要渲染模糊对象n次。将颜色作为3向量处理,让D
为颜色DEST - SRC
。我希望每个渲染都将D/n
添加到源颜色。
可以使用固定功能管道来完成吗?至少对我而言,The glBlendFunc reference相当神秘。看起来这可以是微不足道的,也可能是不可能的。好像我想将alpha设置为1/n
。对于我刚刚描述的行为,我是否需要GL_DEST_MINUS_SRC_COLOR
选项?
我还有一个相关的问题:这个混合操作发生在哪个阶段?片段着色器程序之前或之后?我能够在片段着色器中访问源颜色和目标颜色吗?
我知道实现我想要的一种方法是使用累积缓冲区。我不想这样做,因为它浪费了记忆和填充。
答案 0 :(得分:1)
我最终用来实现我的效果的解决方案是添加混合和渲染目标的组合,我从片段着色器访问它作为纹理。