Skip to content

Instantly share code, notes, and snippets.

@mrange
Created September 15, 2019 18:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrange/4dc78dc00f61b4e6b02757d8a2848da9 to your computer and use it in GitHub Desktop.
Save mrange/4dc78dc00f61b4e6b02757d8a2848da9 to your computer and use it in GitHub Desktop.
data glsl
#version 150
uniform float time;
uniform vec2 resolution;
uniform vec2 mouse;
uniform vec3 spectrum;
uniform sampler2D texture0;
uniform sampler2D texture1;
uniform sampler2D texture2;
uniform sampler2D texture3;
uniform sampler2D prevFrame;
uniform sampler2D prevPass;
in VertexData
{
vec4 v_position;
vec3 v_normal;
vec2 v_texcoord;
} inData;
out vec4 fragColor;
#define PI 3.141592654
#define TAU (2.0 * PI)
float box(in vec2 p, vec2 sz)
{
p = abs(p);
float dx = p.x - sz.x;
float dy = p.y - sz.y;
return max(dx, dy);
}
float softBox(in vec2 p, float r)
{
p *= p;
p *= p;
float l8 = dot(p, p);
return pow(l8, 1.0/8.0) - r;
}
float capsule(vec3 p, float r, float c)
{
return mix(length(p.xz) - r, length(vec3(p.x, abs(p.y) - c, p.z)) - r, step(c, abs(p.y)));
}
vec2 toPolar(vec2 p)
{
return vec2(length(p), atan(p.y, p.x));
}
vec2 toRect(vec2 p)
{
return vec2(p.x*cos(p.y), p.y*sin(p.y));
}
float pMod1(inout float p, float size)
{
float halfsize = size*0.5;
float c = floor((p + halfsize)/size);
p = mod(p + halfsize, size) - halfsize;
return c;
}
vec2 pMod2(inout vec2 p, vec2 size)
{
vec2 c = floor((p + size*0.5)/size);
p = mod(p + size*0.5,size) - size*0.5;
return c;
}
float df_(in vec2 p)
{
p *= 10.0;
p = toPolar(p);
float d = box(p - vec2(3.0, PI), vec2(1, PI));
return d;
}
float rand(vec2 co)
{
return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
float data(in vec2 p)
{
float bd = box(p - vec2(0, 100), vec2(55,
200));
float sy = 1.0;
p.y += 16.0*time;
float ix = pMod1(p.x, 3.0);
float rx = rand(vec2(ix, 100));
p.y += rx*TAU;
float iy = pMod1(p.y, 8.0);
float i = iy + 10*time*sqrt(rx) + rx*TAU;
float sp = (0.5*rx + 0.5*sin(i*0.25));
float sx = 1.0*(max((1.0 - pow(ix/20,2.0)),0));
float d = capsule(vec3(p*sy, 0), 1.0*sx*(0.5*sp + 0.5), 2.7*sx*sp)/sy;
return max(d, bd);
}
float halfBox(in vec2 p)
{
float db = box(p - vec2(3.0, PI), vec2(1, PI));
return db;
}
float df(in vec2 p)
{
// p = toPolar(p);
float sd = 55.0;
float dd = data((p - vec2(3.0, 0))*sd)/sd;
float db = halfBox(p);
return dd;
}
void main(void)
{
vec2 uv = -1. + 2. * inData.v_texcoord;
uv.x *= resolution.x/resolution.y;
float s = 10.0;
float d = df(uv*s)/s;
vec3 col = vec3(smoothstep(0.0025, 0.0, d));
// if (d < 0.0) col = vec3(1.0);
fragColor = vec4(col, 4.0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment