Shader特效——“Gamma校正”的实现 【GLSL】

效果图

Shader特效——“Gamma校正”的实现 【GLSL】_第1张图片

 

GLSL代码

算法比较简单,不再赘述,直接看源码和注释。

uniform sampler2D srcTex;
uniform vec3 levels;

/// Gamma 校正
vec3 gammaCorrect(vec3 color, float gamma){
    return pow(color, vec3(1.0/gamma));
}

/// 对 color 进行重新映射到 min, max 之间
vec3 levelRange(vec3 color, float minInput, float maxInput){
    return min(
       max(color - vec3(minInput), vec3(0.0)) / (vec3(maxInput) - vec3(minInput)),
       vec3(1.0));
}

vec3 finalLevels(vec3 color, float minInput, float gamma, float maxInput){
    return gammaCorrect(levelRange(color, minInput, maxInput), gamma);
}

void main(){
   vec2 uv = gl_FragCoord.xy / vec2(512., 512.);

   vec4 texture = texture2D(srcTex, uv) ;
   
   // 注意 minInput 和 maxInput 的取值范围为[0, 255]
    vec3 adjustedLevels = finalLevels(texture.rgb, levels.x/255.0, levels.y, levels.z/255.0);

   gl_FragColor = vec4(adjustedLevels,1.0);
   
}

 

你可能感兴趣的:(Shader,ShaderJoy,——,Shader,实例详解)