1

GIMP分割ブレンドフィルターコードをGLSLに移植しようとしています。私は他のさまざまなブレンドモードでこれを行うことができましたが、何らかの理由でこれは機能していません。

C gimpコード(SVGベース)は次のとおりです。

if (layA == 0.0 || inCa / layCa > inA / layA)
  outCa = layA * inA + layCa * (1 - inA) + inCa * (1 - layA);
else
  outCa = inCa * layA * layA / layCa + layCa * (1 - inA) + inCa * (1 - layA));

移植されたコードは次のとおりです。

mediump float r;
if (overlay.a == 0.0 || base.r / overlay.r > base.a / overlay.a)
  r = overlay.a * base.a + overlay.r * (1.0 - base.a) + base.r * (1.0 - overlay.a);
else
  r = base.r * overlay.a * overlay.a / overlay.r + overlay.r * (1.0 - base.a) + base.r * (1.0 - overlay.a);

チャネルごとにこれを行い、vec4を使用して結果をマージします。

私のGLSLコードは、GIMPCコードとはまったく異なる結果を提供します。コードを2時間見てエラーを見逃していない限り、オペランドの順序エラーであるに違いないと思います。または、Cに似ていないGLSLのもの。

何か案は?

アップデート:

どのように見えるか:http://i.imgur.com/EjPhz.jpg どのように見えるべきか:http://i.imgur.com/bqbFT.png

4

1 に答える 1

1

問題は私のコードにありました。初期値をlowpとして抽出していました。

于 2012-08-02T08:53:03.773 に答える