18

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

HLSLでこれ行う方法に関するドキュメントがいくつかあります。

少なくとも動作する画面モードが必要です。

私が見ている固定パイプラインの実装はありますか?

4

4 に答える 4

19

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

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

とにかく-その形式の画像を取得したら、次を使用してSCREENを有効にできます。

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR)

OpenGL | ESパイプラインでは、完全なMULTIPLYモードは使用できません。完全に不透明なピクセルのみを操作する場合は、次を使用して偽造できます。

glBlendFunc(GL_ZERO, GL_SRC_COLOR)

ただし、テクスチャとフレームバッファのいずれかで透明なピクセルの結果は正しくありません。

于 2009-05-03T23:29:22.843 に答える
11

これを試してみてください:

glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA)

これは、iPhone /OpenGLESで私に掛け算するように見えます

于 2010-04-01T19:52:58.907 に答える
1

始めるのに最適な場所は、Red Bookのコピーを手に取り、マテリアルとブレンド モードに関する章を読み通すことです。「古典的な」OpenGL ブレンディング関数がどのように機能するかについて、非常に包括的で明確な説明があります。

于 2009-05-03T22:58:54.727 に答える
1

私はこれを使用することを発見しました:

glDepthFun( GL_LEQUAL);

少なくとも私のプロジェクトではうまくいきました。

これがなぜ機能するのかはわかりませんが、誰かが知っている場合は共有してください。

于 2011-03-24T17:01:30.283 に答える