【问题标题】:Framebuffer's RGB colors are different when alpha value is modified修改 alpha 值时 Framebuffer 的 RGB 颜色不同
【发布时间】:2020-10-05 10:12:54
【问题描述】:

我有写入帧缓冲区纹理的片段着色器。我有 2 个使用帧缓冲区输出纹理的着色器。首先仅使用 alpha,其次仅使用 RGB。当帧缓冲区的着色器返回fragmentColor.a = 0 时,即使我手动将fragmentColor.a 设置为1,在第二着色器中使用时RGB 组件也会完全消失。是否可以防止这种“RGB 消失”或者我是否遇到了一些错误?是的,我可以为每个着色器生成不同的纹理,但它会花费大量的性能,因为即使只有一个“绘制”它也非常昂贵。但是,如果我可以同时输出到两个纹理,那也可以解决整个问题。有人有任何建议/解决方案吗?

【问题讨论】:

    标签: opengl glsl


    【解决方案1】:

    您可能启用了混合并将glBlendFunc 设置为glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 之类的值,这也会影响目标alpha 值。为了克服这个问题,有可分离的混合,使用glBlendFuncSeparate[i] 设置它并选择源和目标方程,以便根据应用程序的需要传递 RGB 值。使用 "i" 变体为每个片段着色器输出目标设置不同的混合函数(如果您有一个具有多个输出的片段着色器),或者在之前多次调用非“i”版本每个渲染通道都为您的各个片段着色器设置它。

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 2017-04-02
      相关资源
      最近更新 更多