summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2021-02-27 00:03:58 -0500
committerLeo Tenenbaum <pommicket@gmail.com>2021-02-27 00:03:58 -0500
commit29a9898e47f7c0444e74a35905e7738194182774 (patch)
treee7f50738063e313a6f4bab729f98ab81d8307bb9
parentc3cdf7e26de65340653401b1ef88cd7dc052b373 (diff)
cool perlin noise-based thing!
-rw-r--r--02f.glsl92
-rw-r--r--02v.glsl9
2 files changed, 101 insertions, 0 deletions
diff --git a/02f.glsl b/02f.glsl
new file mode 100644
index 0000000..b20027e
--- /dev/null
+++ b/02f.glsl
@@ -0,0 +1,92 @@
+varying vec2 pos;
+uniform float u_aspect_ratio;
+uniform float u_time;
+
+#define PI 3.14159265
+
+vec3 rand(vec4 co) {
+ float x = 2920.0 * sin(co.x * 21942.0 + co.y * 171324.0 + co.z * 2443.0 + co.w * 34891.0 + 8912.0) * cos(co.x * 23157.0 * co.y * 217832.0 * co.z * co.w + 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 + co.w * 15932.0 + 2222.0) * cos(co.x * 38322.0 * co.y * 271828.0 * co.z * co.w + 1111.0);
+ return vec3(sin(alpha) * cos(beta), sin(alpha) * sin(beta), cos(alpha));
+}
+
+float dot_grid_gradient(vec3 floor_p, vec3 p, float i) {
+ vec3 gradient = rand(vec4(floor_p, i));
+ vec3 dist = p - floor_p;
+ return dot(dist, gradient);
+}
+
+vec3 smooth(vec3 x) {
+ vec3 v = 0.5 + 0.5 * sin(PI * (x - 0.5));
+ return v;
+ //return smoothstep(0.0, 1.0, x);
+}
+
+float perlin_noise(vec3 p, float i) {
+ vec3 p0 = floor(p);
+ vec3 p1 = p0 + vec3(1.0, 1.0, 1.0);
+ vec3 weight = p - p0;
+ weight = smooth(weight);
+
+ float n0, n1, ix0, ix1, iy0, iy1;
+
+ n0 = dot_grid_gradient(vec3(p0.x, p0.y, p0.z), p, i);
+ n1 = dot_grid_gradient(vec3(p1.x, p0.y, p0.z), p, i);
+ ix0 = mix(n0, n1, weight.x);
+
+ n0 = dot_grid_gradient(vec3(p0.x, p1.y, p0.z), p, i);
+ n1 = dot_grid_gradient(vec3(p1.x, p1.y, p0.z), p, i);
+ ix1 = mix(n0, n1, weight.x);
+
+ iy0 = mix(ix0, ix1, weight.y);
+
+ n0 = dot_grid_gradient(vec3(p0.x, p0.y, p1.z), p, i);
+ n1 = dot_grid_gradient(vec3(p1.x, p0.y, p1.z), p, i);
+ ix0 = mix(n0, n1, weight.x);
+
+ n0 = dot_grid_gradient(vec3(p0.x, p1.y, p1.z), p, i);
+ n1 = dot_grid_gradient(vec3(p1.x, p1.y, p1.z), p, i);
+ ix1 = mix(n0, n1, weight.x);
+
+ iy1 = mix(ix0, ix1, weight.y);
+
+
+ float v = mix(iy0, iy1, weight.z);
+ v += 1.0;
+ v *= 0.5;
+ return v;
+}
+
+float channel(float v, float i, float space) {
+ float thickness = 0.02;
+ float edge1 = 0.2 + space * i;
+ float edge2 = edge1 + thickness;
+ float mid = 0.5 * (edge1 + edge2);
+ if (v >= edge1 && v <= mid)
+ return smoothstep(edge1, mid, v);
+ else if (v >= mid && v <= edge2)
+ return smoothstep(edge2, mid, v);
+ else
+ return 0.0;
+}
+
+void main() {
+ vec3 p = vec3(pos * 5.0, u_time * 0.5);
+ p.x *= u_aspect_ratio;
+ float v = perlin_noise(p, 0.0);
+ v *= v;
+ float space = cos(0.7 * u_time);
+ space *= space * space * 0.05;
+ float c1 = channel(v, 0.0, space);
+ float c2 = channel(v, 1.0, space);
+ float c3 = channel(v, 2.0, space);
+ float c4 = channel(v, 3.0, space);
+ float t = 0.5 + 0.5 * sin(1.21 * u_time);
+ vec3 color = clamp(
+ c1 * vec3(t, 0.0, 0.5)
+ + c2 * vec3(0.0, t, 0.5)
+ + c3 * vec3(0.3, 0.0, t)
+ + c4 * vec3(t, 0.5, 0.0), 0.0, 1.0);
+ gl_FragColor = vec4(color, 1.0);
+}
diff --git a/02v.glsl b/02v.glsl
new file mode 100644
index 0000000..d5286df
--- /dev/null
+++ b/02v.glsl
@@ -0,0 +1,9 @@
+attribute vec2 v_render_pos;
+attribute vec2 v_pos;
+
+varying vec2 pos;
+
+void main() {
+ gl_Position = vec4(v_render_pos, 0.0, 1.0);
+ pos = v_pos;
+}