From c3cdf7e26de65340653401b1ef88cd7dc052b373 Mon Sep 17 00:00:00 2001 From: Leo Tenenbaum Date: Fri, 26 Feb 2021 15:58:28 -0500 Subject: the 3rd dimension: time! --- 01f.glsl | 55 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/01f.glsl b/01f.glsl index 9baa911..e16ee6b 100644 --- a/01f.glsl +++ b/01f.glsl @@ -1,36 +1,55 @@ varying vec2 pos; uniform float u_aspect_ratio; +uniform float u_time; -vec2 rand(vec2 co) { - float random = 2920.0 * sin(co.x * 21942.0 + co.y * 171324.0 + 8912.0) * cos(co.x * 23157.0 * co.y * 217832.0 + 9758.0); - return vec2(cos(random), sin(random)); +vec3 rand(vec3 co) { + float x = 2920.0 * sin(co.x * 21942.0 + co.y * 171324.0 + co.z * 2443.0 + 8912.0) * cos(co.x * 23157.0 * co.y * 217832.0 * co.z + 9758.0); + float alpha = acos(mod(x, 2.0) - 1.0); + float beta = 2132.0 * sin(co.x * 10233.0 + co.y * 103222.0 + co.z * 3243.0 + 2222.0) * cos(co.x * 38322.0 * co.y * 271828.0 * co.z + 1111.0); + return vec3(sin(alpha) * cos(beta), sin(alpha) * sin(beta), cos(alpha)); } -float dot_grid_gradient(vec2 floor_p, vec2 p) { - vec2 gradient = rand(floor_p); - vec2 dist = p - floor_p; +float dot_grid_gradient(vec3 floor_p, vec3 p) { + vec3 gradient = rand(floor_p); + vec3 dist = p - floor_p; return dot(dist, gradient); } void main() { - vec2 p = pos * 10.0; + vec3 p = vec3(pos * 5.0, sin(u_time) * 0.6 + u_time * 2.0); p.x *= u_aspect_ratio; - vec2 p0 = floor(p); - vec2 p1 = p0 + vec2(1.0, 1.0); - vec2 weight = p - p0; + + vec3 p0 = floor(p); + vec3 p1 = p0 + vec3(1.0, 1.0, 1.0); + vec3 weight = p - p0; weight = smoothstep(0.0, 1.0, weight); - float n0 = dot_grid_gradient(vec2(p0.x, p0.y), p); - float n1 = dot_grid_gradient(vec2(p1.x, p0.y), p); - float ix0 = mix(n0, n1, weight.x); + float n0, n1, ix0, ix1, iy0, iy1; + + n0 = dot_grid_gradient(vec3(p0.x, p0.y, p0.z), p); + n1 = dot_grid_gradient(vec3(p1.x, p0.y, p0.z), p); + ix0 = mix(n0, n1, weight.x); - n0 = dot_grid_gradient(vec2(p0.x, p1.y), p); - n1 = dot_grid_gradient(vec2(p1.x, p1.y), p); - float ix1 = mix(n0, n1, weight.x); + n0 = dot_grid_gradient(vec3(p0.x, p1.y, p0.z), p); + n1 = dot_grid_gradient(vec3(p1.x, p1.y, p0.z), p); + ix1 = mix(n0, n1, weight.x); + + iy0 = mix(ix0, ix1, weight.y); + + n0 = dot_grid_gradient(vec3(p0.x, p0.y, p1.z), p); + n1 = dot_grid_gradient(vec3(p1.x, p0.y, p1.z), p); + ix0 = mix(n0, n1, weight.x); + + n0 = dot_grid_gradient(vec3(p0.x, p1.y, p1.z), p); + n1 = dot_grid_gradient(vec3(p1.x, p1.y, p1.z), p); + ix1 = mix(n0, n1, weight.x); + + iy1 = mix(ix0, ix1, weight.y); + - float v = mix(ix0, ix1, weight.y); + float v = mix(iy0, iy1, weight.z); v += 1.0; v *= 0.5; - vec3 color = mix(vec3(0.4, 0.2, 1.0), vec3(1.0, 0.6, 0.6), v); + vec3 color = mix(vec3(0.4, 0.2, 1.0), vec3(1.0, 0.4, 0.4), v); gl_FragColor = vec4(color, 1.0); } -- cgit v1.2.3