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;

谁能帮我指出正确的方向?

谢谢

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 回答