片段着色器 - 重现蓝色通道级输出滑块

时间:2012-02-22 09:33:45

标签: opengl-es glsl opengl-es-2.0 fragment-shader

我正在尝试创建一个片段着色器,它将完成与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;

有人能帮我指出正确的方向吗?

由于

1 个答案:

答案 0 :(得分:0)

mix取0到1之间的值作为混合参数。您的255将被钳制为1,因此您将始终获得最大输出值。以类似的方式,纹理值在0 ... 1范围内,你不能除以255进入某个范围!顺便说一句:简单地除以255是不正确的 - 详情请http://kaba.hilvi.org/programming/range/index.htm