From 687a8ac749032dc30e49484996f306cc2249d8d5 Mon Sep 17 00:00:00 2001 From: Matiss Jurevics Date: Tue, 13 Jan 2026 19:27:55 +0000 Subject: [PATCH] No idea --- main.cpp | 1 + main.o | Bin 301720 -> 301928 bytes shader-demo | Bin 270624 -> 270624 bytes shaders/pendulum.frag | 74 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 shaders/pendulum.frag diff --git a/main.cpp b/main.cpp index 3b80d60..f7e8c7a 100644 --- a/main.cpp +++ b/main.cpp @@ -435,6 +435,7 @@ void init_shaders() { add_shader("TUNNEL", "shaders/tunnel.frag", 0.2f, 0.8f, 0.2f); add_shader("FRACTAL", "shaders/fractal.frag", 0.2f, 0.2f, 0.8f); add_shader("MANDEL", "shaders/mandelbrot.frag", 0.5f, 0.0f, 0.5f); + add_shader("DBL PEND", "shaders/pendulum.frag", 0.7f, 0.7f, 0.1f); } int main() { diff --git a/main.o b/main.o index 1ff4c84e603c23557d689083d03e80eef4e8f25b..8f42373270ad18df04bac30bbebe1486d203d388 100644 GIT binary patch delta 16292 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 GME)O8VIcbe diff --git a/shader-demo b/shader-demo index f9f8b8fdf6d59fdf41931d4ee3bfc7dd7ff88d79..1d583043f57651a4fcfce9f7a002c91dc54207ef 100755 GIT binary patch delta 20370 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 delta 20340 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 S#`fe({!D>Wyk(&A=KlfK6TjsE diff --git a/shaders/pendulum.frag b/shaders/pendulum.frag new file mode 100644 index 0000000..3fe670b --- /dev/null +++ b/shaders/pendulum.frag @@ -0,0 +1,74 @@ +#version 100 +precision mediump float; + +uniform float u_time; +uniform vec2 u_resolution; + +// Constants +#define PI 3.14159265359 +#define G 9.81 +#define L1 1.0 +#define L2 1.0 +#define M1 1.0 +#define M2 1.0 +#define DT 0.05 +#define ITERATIONS 100 + +void main() { + // Map pixel to initial angles (-PI to PI) + vec2 uv = (gl_FragCoord.xy / u_resolution.xy) * 2.0 - 1.0; + float t1 = uv.x * PI; + float t2 = uv.y * PI; + + // Initial velocities + float v1 = 0.0; + float v2 = 0.0; + + // Previous angles for Verlet or just simple Euler/RK4 + // Using semi-implicit Euler for stability/simplicity in shader + + float flip_time = -1.0; + + // Animate gravity to make it breathe? Or length? + float g = G + sin(u_time * 0.5) * 2.0; + + for (int i = 0; i < ITERATIONS; i++) { + float num1 = -g * (2.0 * M1 + M2) * sin(t1); + float num2 = -M2 * g * sin(t1 - 2.0 * t2); + float num3 = -2.0 * sin(t1 - t2) * M2; + float num4 = v2 * v2 * L2 + v1 * v1 * L1 * cos(t1 - t2); + float den = L1 * (2.0 * M1 + M2 - M2 * cos(2.0 * t1 - 2.0 * t2)); + float a1 = (num1 + num2 + num3 * num4) / den; + + num1 = 2.0 * sin(t1 - t2); + num2 = (v1 * v1 * L1 * (M1 + M2)); + num3 = g * (M1 + M2) * cos(t1); + num4 = v2 * v2 * L2 * M2 * cos(t1 - t2); + den = L2 * (2.0 * M1 + M2 - M2 * cos(2.0 * t1 - 2.0 * t2)); + float a2 = (num1 * (num2 + num3 + num4)) / den; + + v1 += a1 * DT; + v2 += a2 * DT; + t1 += v1 * DT; + t2 += v2 * DT; + + // Dampening? No, chaotic system usually conservative (or we want to see chaos) + + // Check for flip (crossing PI) + if (abs(t1) > PI || abs(t2) > PI) { + flip_time = float(i) / float(ITERATIONS); + break; + } + } + + vec3 col = vec3(0.0); + if (flip_time > 0.0) { + // Did flip + col = vec3(0.2 + 0.8 * flip_time, 0.5 * flip_time, 1.0 - flip_time); + } else { + // Did not flip (stableish) + col = vec3(0.1, 0.1, 0.2); + } + + gl_FragColor = vec4(col, 1.0); +}