#define DO_RED float sdCircle(vec2 p, float r) { return length(p) - r; } float sdBox(vec2 p, vec2 b) { vec2 d = abs(p) - b; return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0); } void main() { vec2 uv = (fragTexCoord * 2.0 - 1.0) * vec2(iResolution.x / iResolution.y, 1.0); vec2 m = (iMouse / iResolution - 0.5) * 2.0 * vec2(iResolution.x / iResolution.y, 1.0); m.y = -m.y; // Raylib float t = iTime * 0.8; /* rotating box */ float angle = t; vec2 rot = vec2(cos(angle) * uv.x - sin(angle) * uv.y, sin(angle) * uv.x + cos(angle) * uv.y); float box = sdBox(rot, vec2(0.3)); /* pulsing circle that follows mouse */ float pulse = 0.05 + 0.02 * sin(iTime * 3.0); float circle = sdCircle(uv - m, pulse); /* combine */ float d = min(box, circle); /* coloring */ #ifdef DO_RED vec3 col = mix(vec3(0.05), vec3(1.0, 0.2, 0.1), 1.0 - smoothstep(0.0, 0.01, d)); col += vec3(0.1, 0.4, 1.0) * (1.0 - smoothstep(0.0, 0.01, abs(d) - 0.005)); col += min(0.03 / abs(d), 1.0) * vec3(1.0, 0.3, 0.2); #else vec3 col = mix(vec3(0.05), vec3(0.2, 0.6, 1.0), 1.0 - smoothstep(0.0, 0.01, d)); col += vec3(1.0, 0.4, 0.1) * (1.0 - smoothstep(0.0, 0.01, abs(d) - 0.005)); col += min(0.03 / abs(d), 1.0) * vec3(0.3, 0.6, 1.0); #endif finalColor = vec4(col, 1.0); }