2016-09-02 8 views
3

写真1は、次のとおりです。2つの透明なPNG写真のためのopenglシェーダミックス関数が黒くなるのはなぜですか?

enter image description here

写真2:

コース写真2のenter image description here

は、部分的に透明です。

しかし、私は、そのようなものとしてシェーダでそれらをミックスするとき:

vec4 add(vec4 one, vec4 two){ 
    return mix(one, two, two.a); 
} 

彼らはなって次のように、部分的に黒:

enter image description here

私はそれが黒生成しますなぜそんなに混乱しています色。私は機能を混在知っ がbaselyこれらのように実装しています

A*(1-alpha)+B*alpha 

答えて

1

最後に、私はアルファでRGBを分割することでこの問題を解決:

にのみ、このようなあなたの第二の画像のアルファに基づいてRGBカラー値を混ぜる必要がありますなぜか分からない。しかし、私は正常に黒色を削除します。

2

黒色が生成されません、それはあなたの背景の色です。これは、2つの色とそのアルファを混合しているために表示されます。結果のアルファが1未満のときに黒い背景を見ることができます。

two.rgb/two.a 

が私を思っ

vec4 add(vec4 one, vec4 two){ 
    return mix(one.rgb, two.rgb, two.a); 
} 
+0

申し訳ありませんが、遅れて返信しますが、これらの変更はまだ動作しません。 –

+0

gl_FragColorのalphaを常に1.0に設定していますか? 'gl_FragColor = vec4(color.rgb、1.0);' – MarGenDo

+0

ええ、テクスチャの問題だと思います。なぜ私はそれがアルファと元の白のテクスチャグレーを作る必要があるのか​​分からないと思った。 –

関連する問題