2009-05-03 17 views
16

OpenGL ES 1.1コード(シェイダーなし)でPhotoshopブレンドモード(「掛け算」、「スクリーン」など)を模倣する必要があります。シェーダなしのOpenGL ESへのPhotoshopブレンドモード

はこのとHLSLを行う方法についていくつかのドキュメントがあります

は、私は、少なくとも作業画面モードを必要としています。

固定パイプラインの実装はありますか?

+1

[This](http://www.pegtop.net/delphi/articles/blendmodes/)ページには、それぞれのブレンドモードがどのように機能するかについての詳細が多数表示されています(図表付き) – bobobobo

答えて

15

ほとんどのフォトショップブレンドモードは、Porter-Duffブレンドモードに基づいています。

これらは、すべての画像(テクスチャ、レンダバッファ)が事前に乗算された色空間にあることを必要とします。これは通常、テクスチャに格納する前に、すべてのピクセル値にアルファ値を掛けて行います。例えば。完全に透明なピクセルは、事前に乗算されていない色空間では黒のように見えます。この色空間に慣れていない場合は、ウェブ上で1〜2時間読むことができます。これはきちんとしたコンセプトで、フォトショップのような構成に必要です。とにかく

- あなたはその形式であなたのイメージを持っていたら、あなたは使って画面を有効にすることができます:| ESパイプライン

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR) 

フルMULTIPLYモードは、OpenGLでは不可能です。透明なピクセルのためのいずれかのあなたのテクスチャで

glBlendFunc(GL_ZERO, GL_SRC_COLOR) 

結果とあなたのフレームバッファは、しかし間違っていることでしょう:あなたが唯一の完全な不透明ピクセルで作業する場合、あなたは偽のそれ使用することができます。

1

まず、Red Bookのコピーを手に入れて、素材とブレンドモードに関する章を読んでください。 「古典的な」OpenGLブレンディング関数がどのように機能するかについて、非常に包括的かつ明確な説明があります。

10

あなたはこれを試してみてください:

glDepthFun(GL_LEQUAL);

すべてだった:

glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA) 

これは、この使用していることを私が発見したES

+1

ありがとうございます。 Photoshopで乗算する( –

+0

)これは、画像が単色(不透明)の場合にのみ機能します。透明な画像がある場合は、白い背景の前に置いて試してください。 – Peter

1

iPhone/OpenGLの上で私に掛けるようになります。スクリーン効果を得る必要がある、少なくともそれは私のプロジェクトでうまくいった。

私はなぜこれが機能するのか分かりませんが、誰かが分かち合うと分かっています。

関連する問題