为什么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

以为我不知道为什么。但是我成功地去除了黑色。