私が開発しているペイント アプリでは、ユーザーが透明なブラシで描画できるようにしたいと考えています。たとえば、白い背景の上に黒いペイントが灰色になるはずです。塗り重ねると黒に近い色になります。
しかし、その場所に何回描画しても、結果の色は決して黒くなりません。実際、数行後に変更が停止します。Photoshop によると、OpenGL で左側に描画されたブロブのアルファは最大 0.8 であり、私はそれが 1 であると予想しています。
私のアプリは、Apple の GLPaint サンプルのように一連のスタンプを描画して線を形成することによって機能します。スタンプは、次の機能とブレンドされます。
glBlendFuncSeparate(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_ONE);
glBlendEquation(GL_FUNC_ADD);
私のフラグメントシェーダー:
uniform lowp sampler2D u_texture;
varying highp vec4 f_color;
void main(){
gl_FragColor = texture2D(u_texture, gl_PointCoord).aaaa*f_color*vec4(f_color.aaa, 1);
}
繰り返し描画するときにフルカラーを取得するには、ブレンドをどのように構成すればよいですか?
2013 年 7 月 11 日更新
おそらく、最初にテクスチャに描画し、次にテクスチャを画面上に描画することにも注意する必要があります。テクスチャは、次のコードを使用して生成されます。
glGenFramebuffers(1, &textureFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, textureFramebuffer);
glGenTextures(1, &drawingTexture);
glBindTexture(GL_TEXTURE_2D, drawingTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pixelWidth, pixelHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
更新 2013/02/12 Apple の GLPaint プログラムを に変更してみましたが、この動作は iOS7 でのみ観察できることがわかりました。以下のスクリーンショットでわかるように、iOS 7 の色は少し薄く、うまく混ざりません。の
GL_ONE, GL_ONE_MINUS_SRC_ALPHA
ブレンド機能はiOS6でうまく機能します。この動作は、iOS7 の CALAyer の実装などによって引き起こされる可能性がありますか?どうすれば解決できますか?
2014 年 10 月 7 日更新
Apple は最近、iOS7 の GLPaint サンプルを更新しましたが、そこでも問題が観察されます。コードに基づいて別のスレッドを作成しました: Unmodified iOS7 Apple GLPaint example blending issue