0
私は、Photoshopレベルの出力スライダと同じ仕事をするフラグメントシェーダを作成しようとしています。私は特定のチャンネル(この場合は青色)でこれをやりたいと思います。フラグメントシェーダ - ブルーチャネルレベルの出力スライダを再現
私は以下のようにコードを持っている:私はラインでより多くしなければならないことだと思うので、
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;
誰が助けてもらえ正しい方向に私を向ける?
おかげ
ここで定義されているマクロを使用していただきありがとうございます。http://mouaif.wordpress.com/2009/01/28/levels-control-shader /ここで彼は値を255で割ります、それは間違っていますか? – Skeep
@Skeep:ソースコードのあるサーバーがダウンしているようですが、記事では255で割ることはありません。シェーダコードで整数テクスチャが使用されているかもしれません。とにかく:これのためにマクロを使うべきではありません。関数を使用します。マクロは、関数のローカルデータで繰り返し実行されるような、関数にうまく収まらないものを対象としています。 – datenwolf
私は正しい方向に向いてくれてありがとう – Skeep