ユーザーが異なるシェーダーとそれらの組み合わせを切り替えることができるアプリケーションを作成しています。したがって、まったく同じシーンを複数回描きたいと思います。
最後に、すべてのパスを 1 つの出力に結合する必要があります。glblendfunc を使用することを考えたすべてのパスを結合するには、必要な結果が得られません。
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//use first shader
draw();
if (secondShaderWished) {
//use second shader
draw()
}
各描画呼び出しで、透明領域などのアルファ値を持つテクスチャを描画します。最終的な結果として、主に最後のレンダー パスの効果が見られますが、境界 (アルファ値がわずかに低下する場所) では最初のシェーダー効果が見られます。私が考えているのは、2つのパスをブレンドできるようにする2番目のglBlendFuncを使用する必要があるということですが、希望する効果を破壊するアルファ値に触れない方法は考えられません。
私は何をすべきか?アルファブレンディング以外に何かありますか?
編集: 私の目標は、1 つまたは複数のパスを結合することです。色を混ぜたい (ほとんどの場合、それらを一緒に追加する) のですが、各パスの色は、異なるレイヤー間で次のブレンド関数を介して計算されます:
編集: こんにちは!私はこの問題に取り組んでいますが、行き詰まります。シェーダーで sampler2d を適切に設定する方法がわかりません...何が間違っていますか?
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _FBO)
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _Tex);
glViewport(0, 0, viewportSize.x(), viewportSize.y());
draw();
GLuint texLocation = glGetUniformLocation(_shader->getProgramID(),"pass0");
glUniform1i(texLocation, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);