0

フォトショップレベルの出力スライダーと同じ仕事をするフラグメントシェーダーを作成しようとしています。特定のチャンネル(この場合は青)でこれを実行したいと思います。

私は以下のようなコードを持っています:

varying highp vec2 textureCoordinate;

uniform sampler2D inputImageTexture;

#define GammaCorrection(color, gamma)       pow(color, vec3(1.0/gamma))

#define LevelsControlOutputRange(color, minOutput, maxOutput) mix(vec3(minOutput/255), vec3(maxOutput/255), color)


void main()
{

     lowp vec4 texel = texture2D(inputImageTexture, textureCoordinate);

     lowp vec3 outputColor;
     outputColor.rgb = texel.rgb;

     lowp vec3 pass3 = LevelsControlOutputRange(outputColor,200,255); 

     lowp vec4 pass4;
     pass4.r = outputColor.r;
     pass4.g = outputColor.g;
     pass4.b = pass3.b;

 gl_FragColor = pass4;


}

これは結果の画像には影響しないので、次の行でさらに多くのことを行う必要があると思います。

pass4.b = pass3.b;

誰かが私を正しい方向に向けるのを手伝ってもらえますか?

ありがとう

4

1 に答える 1

0

mixミキシングパラメータとして0〜1の値を取ります。255は1にクランプされるため、常に最大出力値が得られます。同様に、テクスチャ値は0〜1の範囲にあります。ある範囲に入るには、255で割ってはいけません。ところで:単に255で割るのは正しくありません–詳細はこちらhttp://kaba.hilvi.org/programming/range/index.htm

于 2012-02-22T09:40:11.273 に答える