0

Open GL ES 2.0 でテクスチャ マッピングにこの単純なシェーダーを使用します。オーバーレイ ブレンディング モードのコードを追加する必要があります。アルゴリズム 私はすべてを理解しています。しかし、ミキシングのために画面上のピクセルの色を取得する方法。

psソースとしてテクスチャを1つだけ使用します

String vertexShader = "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
        + "attribute vec2 " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
        + "uniform mat4 u_projTrans;\n" //
        + "varying vec4 v_color;\n" //
        + "varying vec2 v_texCoords;\n" //
        + "\n" //
        + "void main()\n" //
        + "{\n" //
        + "   v_color = vec4(1, 1, 1, 1);\n" //
        + "   v_texCoords = " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
        + "   gl_Position =  u_projTrans * " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
        + "}\n";
    String fragmentShader = "#ifdef GL_ES\n" //
        + "#define LOWP lowp\n" //
        + "precision mediump float;\n" //
        + "#else\n" //
        + "#define LOWP \n" //
        + "#endif\n" //
        + "varying LOWP vec4 v_color;\n" //
        + "varying vec2 v_texCoords;\n" //
        + "uniform sampler2D u_texture;\n" //
        + "void main()\n"//
        + "{\n" //
        + "  gl_FragColor = texture2D(u_texture, v_texCoords);\n" //
        + "}";
4

1 に答える 1

2

簡単に言えば、できません。glBlendFunc()、glBlendEquation & Co によって制御される従来の GL ブレンディングがありますが、これはフラグメント シェーダーの後に実行される完全に異なるパイプライン ステージです。ブレンディングは、現在のピクセルの色 (宛先) をフラグメント シェーダーが計算した色と混合します (ソース) 設定可能なさまざまなモードと方程式を使用します。達成したい効果に対してこれで十分な場合は、それを選択してください。

シェーダーでのブレンディングをさらに制御する必要がある場合は、ブレンドしたい画像をテクスチャにレンダリングし、これをブレンドしたいものを描画するときに追加の入力テクスチャとして使用できますが、これは膨大なオーバーヘッドと避けるべきです。

質問OpenGL Blend Modes vs Shader Blendingも参照してください。

于 2013-05-18T14:03:53.013 に答える