跳到主要内容
← Image Manipulation with Shaders

Image Manipulation with Shaders

Color Distance

简单,我的版本带了个clamp,使得只保留颜色的效果留下了

实时渲染 · 纹理 GLSL

第 8 课:Color Distance

我的解:简单,我的版本带了个clamp,使得只保留颜色的效果留下了

我的解

uniform vec2 iResolution;
uniform sampler2D iChannel0;

const vec3 refColor = vec3(1.0, 0.0, 0.0);
vec3 RelativeLuminance(vec3 tex){
  return vec3(tex.r * 0.2126 + tex.g * 0.7152 + tex.b * 0.0722);
}
void main() {
  // Normalized pixel coordinates (from 0 to 1)
  vec2 uv = gl_FragCoord.xy / iResolution.xy;
  vec3 color = texture(iChannel0, uv).rgb;
  vec3 luminance = RelativeLuminance(color);
  float colorDist = clamp(distance(color, refColor), 0.0, 1.0);
  vec3 saturated = mix(color,luminance,colorDist);
  gl_FragColor = vec4(saturated,1.0);
}

复盘笔记

  • 简单,我的版本带了个clamp,使得只保留颜色的效果留下了
  • 这一小段的功能是,只有颜色值接近 refColor 本身(亮度、饱和度也相似)才被认为“接近”,同样色相但亮度不同的颜色,并不会被认为“相近”