glBlendFunc を
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
テスト目的で、このようにフラグメントシェーダーに色を設定しました
gl_FragColor = vec4(1.0,0.0,0.0,0.0);
オブジェクトは完全に透明であるべきではありませんか? そうでない場合、その理由は何でしょうか?
glBlendFunc を
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
テスト目的で、このようにフラグメントシェーダーに色を設定しました
gl_FragColor = vec4(1.0,0.0,0.0,0.0);
オブジェクトは完全に透明であるべきではありませんか? そうでない場合、その理由は何でしょうか?
の最初の引数glBlendFunc()
はソース ファクターで、2 番目の引数は宛先ファクターです。あなたの場合:
sfactor = 1.0;
dfactor = 1.0 - src.alpha;
、src.alpha = 0.0
あなたからgl_FragColor
:
sfactor = 1.0;
dfactor = 1.0;
したがって、バッファに入れられる色は次のようになります。
buffer = sfactor * src + dfactor * dst;
置換しています...
buffer = (1.0,0.0,0.0,0.0) + dst;
簡単に言えば、既存のバッファの赤チャンネルに 1 を追加します。
出力を完全に透明にしたい場合、通常の関数は次のとおりです。
glBlendFunc(GL_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
あなたが書いたものは、通常、ソースの事前に乗算されたアルファに使用されます。しかし、(1, 0, 0, 0) は明らかに事前に乗算されたアルファ値ではありません!