【问题标题】:OpenGL - blendingOpenGL - 混合
【发布时间】:2015-02-16 17:55:08
【问题描述】:

我在 PS 中使用这种颜色混合进行光线投射

 actual = <some color loaded from texture>;
 actual.a *= 0.05; //reduce the alpha to have a more transparent result 

 //Front to back blending  
 actual.rgb *= actual.a;
 last = (1.0 - last.a) * actual + last;   

可以重写这个方程以使用 OpenGL 3 混合函数吗?目标是通过在自身上渲染更多 qaud 来从 PS 中移除循环

到目前为止,我正在使用这个:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),但结果看起来不同

编辑:

last = cumulated color (aka. final color)    
actual = current color from texture

【问题讨论】:

  • 你能澄清一下last和actual是什么吗? actual 是当前源颜色,last 是目标颜色,最后是帧缓冲区中的当前值吗?
  • @thokra 我已经编辑了问题

标签: opengl blending


【解决方案1】:

主要问题是您仍然需要将源颜色与着色器中的 alpha 值进行预乘 (actual.rgb *= actual.a)。

我认为混合你必须使用这个功能:

glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE);
glBlendEquation(GL_FUNC_ADD):

【讨论】:

  • 这给了我黑色的结果
【解决方案2】:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) - 通过使用这个,你有如下公式:

last.rgb = actual.a * actual.rgb + ( 1.0 - actual.a ) * last.rgb;

它和你的着色器公式完全不同:

actual.rgb *=actual.a;

最后一个 = (1.0 - last.a) * 实际 + 最后一个;

所以,你有不同的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多