为什么opengl shader mix函数让两张透明png图片变黑了?
why opengl shader mix function for two transparent png photo become black?
照片 1 是:
照片 2 是:
当然照片2是部分透明的。
但是当我像这样在着色器中混合它们时:
vec4 add(vec4 one, vec4 two){
return mix(one, two, two.a);
}
它们变成部分黑色,如下所示:
我很困惑为什么它会生成黑色。
我知道 mix 函数基本实现如下:
A*(1-alpha)+B*alpha
黑色不会生成,它是您的背景颜色。它出现是因为您正在混合两种颜色及其 alpha。当生成的 alpha 小于 1 时,您可以看到黑色背景。
您应该只根据第二张图片的 alpha 混合 RGB
颜色值,如下所示:
vec4 add(vec4 one, vec4 two){
return mix(one.rgb, two.rgb, two.a);
}
最后,我通过将 rgb 除以 alpha 解决了这个问题
two.rgb / two.a
以为我不知道为什么。但是我成功地去除了黑色。
照片 1 是:
照片 2 是:
当然照片2是部分透明的。
但是当我像这样在着色器中混合它们时:
vec4 add(vec4 one, vec4 two){
return mix(one, two, two.a);
}
它们变成部分黑色,如下所示:
我很困惑为什么它会生成黑色。 我知道 mix 函数基本实现如下:
A*(1-alpha)+B*alpha
黑色不会生成,它是您的背景颜色。它出现是因为您正在混合两种颜色及其 alpha。当生成的 alpha 小于 1 时,您可以看到黑色背景。
您应该只根据第二张图片的 alpha 混合 RGB
颜色值,如下所示:
vec4 add(vec4 one, vec4 two){
return mix(one.rgb, two.rgb, two.a);
}
最后,我通过将 rgb 除以 alpha 解决了这个问题
two.rgb / two.a
以为我不知道为什么。但是我成功地去除了黑色。