From 0ef75170b37907105ec2166e6a2c7472eecd3db6 Mon Sep 17 00:00:00 2001 From: hellerve Date: Thu, 8 Jun 2017 10:47:30 -0400 Subject: [PATCH] weird: added i ching example --- weird/i_ching.glsl | 74 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 weird/i_ching.glsl diff --git a/weird/i_ching.glsl b/weird/i_ching.glsl new file mode 100644 index 0000000..245ff35 --- /dev/null +++ b/weird/i_ching.glsl @@ -0,0 +1,74 @@ +#ifdef GL_ES +precision mediump float; +#endif + +#define PI 3.14159265359 +#define TWO_PI 6.28318530718 + +uniform vec2 u_resolution; +uniform float u_time; + +float shape(vec2 st, float n) { + st = st*2.-1.; + float a = atan(st.x,st.y)+PI; + float r = TWO_PI/n; + return abs(cos(floor(.5+a/r)*r-a)*length(st)); +} + +float box(vec2 st, vec2 size) { + return shape(st*size, 4.); +} + +float rect(vec2 _st, vec2 _size) { + _size = vec2(0.5)-_size*0.5; + vec2 uv = smoothstep(_size,_size+vec2(1e-4),_st); + uv *= smoothstep(_size,_size+vec2(1e-4),vec2(1.0)-_st); + return uv.x*uv.y; +} + +float _mix(vec2 pos, float x) { + return mix(box(pos, vec2(0.84,1.)),box(pos-vec2(0.03,0.),vec2(1.)), x); +} + +float hex(vec2 st, float a, float b, float c, float d, float e, float f){ + st = st*vec2(2.,6.); + + vec2 fpos = fract(st); + vec2 ipos = floor(st); + + if (ipos.x == 1.0) fpos.x = 1.-fpos.x; + + if (ipos.y < 1.0) return _mix(fpos ,a); + else if (ipos.y < 2.0) return _mix(fpos, b); + else if (ipos.y < 3.0) return _mix(fpos, c); + else if (ipos.y < 4.0) return _mix(fpos, d); + else if (ipos.y < 5.0) return _mix(fpos, e); + else if (ipos.y < 6.0) return _mix(fpos, f); + return 0.0; +} + +float hex(vec2 st, float n) { + float b[6]; + float remain = floor(mod(n,64.)); + for(int i = 0; i < 6; i++){ + b[i] = 0.0; + b[i] = step(1.0,mod(remain,2.)); + remain = ceil(remain/2.); + } + return hex(st,b[0],b[1],b[2],b[3],b[4],b[5]); +} + +void main(){ + vec2 st = gl_FragCoord.xy/u_resolution.xy; + st.y *= u_resolution.y/u_resolution.x; + + st *= 10.0; + vec2 fpos = fract(st); + vec2 ipos = floor(st); + + float t = u_time*10.0; + float df = 1.0; + df = hex(fpos,ipos.x+ipos.y+t)+(1.0-rect(fpos,vec2(0.7))); + + gl_FragColor = vec4(mix(vec3(0.17),vec3(238./255., 220./255., 190./255.),step(0.7,df)),1.0); +}