シェーダーなしのOpenGL ESへのPhotoshopブレンドモード
質問
OpenGL ES 1.1コード(なしシェーダー)でPhotoshopのブレンドモード(「乗算」、「画面」など)を模倣する必要があります。
HLSLを使用してこれを行う方法については、いくつかのドキュメントがあります :
- http://www.nathanm .com / photoshop-blending-math /(アーカイブ)
- http://mouaif.wordpress。 com / 2009/01/05 / photoshop-math-with-glsl-shaders /
少なくとも動作中の画面モードが必要です。
見ている可能性のある固定パイプラインの実装はありますか?
解決
Photoshopのほとんどのブレンドモードは、Porter-Duffのブレンドモードに基づいています。
これらは、すべての画像(テクスチャ、レンダーバッファ)があらかじめ乗算された色空間にあることを必要とします。これは通常、すべてのピクセル値にアルファ値を掛けてからテクスチャに保存することで行われます。例えば。完全に透明なピクセルは、事前乗算されていない色空間では黒のように見えます。この色空間に慣れていない場合は、Webで1〜2時間読んでください。これはきちんとした良いコンセプトであり、フォトショップのような構成に必要です。
とにかく-その形式で画像を取得したら、次を使用してSCREENを有効にできます。
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR)
OpenGL | ESパイプラインでは、完全なMULTIPLYモードは使用できません。完全な不透明ピクセルのみを使用する場合は、次を使用して偽造できます。
glBlendFunc(GL_ZERO, GL_SRC_COLOR)
テクスチャとフレームバッファのいずれかの透明ピクセルの結果は間違っています。
他のヒント
これを試してください:
glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA)
これは、iPhone / OpenGL ESで私に増殖しているように見えます
これを使用していることがわかりました:
glDepthFun(GL_LEQUAL);
すべてがスクリーン効果を得る必要がありました。少なくとも私のプロジェクトではうまくいきました。
これがなぜ機能するのかはわかりませんが、誰かが知っている場合は共有してください。