我正在尝试使用OpenGL对透明对象使用不同的alpha混合方程式进行实验,但看起来片段着色器对单个对象上的片段颜色起作用,并且无法考虑对象背后的场景。
另一方面,似乎没有一种方法可以用任意GLSL代码截取blending stage,例如,我无法想到一种使用当前OpenGL原语重现soft light blend mode的方法。
有没有办法调和这些?
混合仍然是片段流水线的少数部分之一,这是GPU上的硬连线电路。因此,它不是可编程的。最好的选择是渲染到纹理并进行混合后处理。
有几个相对较好的扩展名:
复制渲染目标,并用它作为纹理绘制对象。
如果有很多小对象,则只能复制渲染目标的一部分。
第一遍:将具有渲染目标的对象作为纹理绘制到texture_2;
第二遍:绘制对象以使用Texture_2渲染目标;