Opengl es 片段着色器-再现蓝色通道级别输出滑块

Opengl es 片段着色器-再现蓝色通道级别输出滑块,opengl-es,glsl,opengl-es-2.0,fragment-shader,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 LevelsControlOutput

我正在尝试创建一个片段着色器,它将完成与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;
有人能帮我指出正确的方向吗


谢谢

mix
将0到1之间的值作为混合参数。您的255将被钳制为1,因此您将始终获得最大输出值。以类似的方式,纹理值在0…1到255之间,不能除以255进入某个范围!顺便说一句:简单地除以255是不正确的-这里的详细信息

感谢回复日期沃尔夫·伊姆使用这里定义的宏:这里他将值除以255,是不是不正确?@Skeep:源代码服务器似乎停机了,但在文章中没有除以255。可能着色器代码使用整数纹理,这会很奇怪。无论如何:你不应该使用宏来实现这一点。使用函数。宏适用于不适合函数的对象,例如对函数的本地数据执行的重复任务。