第 6 课:Value Noise
实现
uniform vec2 iResolution;
float random(vec2 point){
float d = dot(point, vec2(12.34, 56.78));
float r = fract(sin(d) * 1234.5678);
r = r * 2.0 - 1.0;
return r;
}
float noise(vec2 point) {
vec2 i = floor(point);
vec2 f = fract(point);
vec2 u = smoothstep(0.0, 1.0, f);
float r1 = random(i + vec2(0.0, 0.0));
float r2 = random(i + vec2(1.0, 0.0));
float r3 = random(i + vec2(0.0, 1.0));
float r4 = random(i + vec2(1.0, 1.0));
return mix(mix(r1, r2, u.x), mix(r3, r4, u.x), u.y);
}
void main() {
vec2 uv = gl_FragCoord.xy / iResolution.xy;
vec2 ratio = vec2(iResolution.x / iResolution.y, 1.0);
float noiseValue = noise(vec2(uv * ratio * 5.0)) * 0.5 + 0.5;
gl_FragColor = vec4(vec3(noiseValue), 1.0);
}