我正在尝试创建一个片段着色器,它将完成与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;
有人能帮我指出正确的方向吗?
由于
答案 0 :(得分:0)
mix
取0到1之间的值作为混合参数。您的255将被钳制为1,因此您将始终获得最大输出值。以类似的方式,纹理值在0 ... 1范围内,你不能除以255进入某个范围!顺便说一句:简单地除以255是不正确的 - 详情请http://kaba.hilvi.org/programming/range/index.htm