Opengl es 片段着色器-再现蓝色通道级别输出滑块
我正在尝试创建一个片段着色器,它将完成与photoshop级别输出滑块相同的工作。我想在一个特定的频道上这样做(在本例中为蓝色) 我的代码如下: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
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。可能着色器代码使用整数纹理,这会很奇怪。无论如何:你不应该使用宏来实现这一点。使用函数。宏适用于不适合函数的对象,例如对函数的本地数据执行的重复任务。