diff --git a/experiments/perlin/dumb.frag b/experiments/perlin/dumb.frag new file mode 100644 index 0000000..2376068 --- /dev/null +++ b/experiments/perlin/dumb.frag @@ -0,0 +1,17 @@ +#ifdef GL_ES +precision mediump float; +#endif + +uniform vec2 u_resolution; +uniform vec2 u_mouse; +uniform float u_time; + +#define PI 3.14159265359 + + + +void main() { + vec2 st = gl_FragCoord.xy/u_resolution; + vec3 color = vec3(0.0,0.0,0.0) + gl_FragColor = vec4(color, 1.0); +} diff --git a/experiments/perlin/main.frag b/experiments/perlin/main.frag index 2376068..caa2b15 100644 --- a/experiments/perlin/main.frag +++ b/experiments/perlin/main.frag @@ -1,17 +1,129 @@ #ifdef GL_ES precision mediump float; #endif - uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; #define PI 3.14159265359 +const vec3 uAColor = vec3(.0,.5,.5); +const vec3 uBColor = vec3(.0,.5,.5); +const vec3 uCColor = vec3(0.,.5,.333); +const vec3 uDColor = vec3(.0,.5,.667); +//get colors from http://dev.thi.ng/gradients/ +vec3 cosPalette(float t) { return uAColor + uBColor*cos(6.28318*(uCColor*t+uDColor)); } + +//2d perlin noise fn via stegu/webgl-noise +vec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } + +vec4 permute(vec4 x) { return mod289(((x*34.0)+10.0)*x);} + +vec4 taylorInvSqrt(vec4 r){ return 1.79284291400159 - 0.85373472095314 * r; } + +vec2 fade(vec2 t) { return t*t*t*(t*(t*6.0-15.0)+10.0); } + +// Classic Perlin noise +float cnoise(vec2 P) +{ + vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0); + vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0); + Pi = mod289(Pi); // To avoid truncation effects in permutation + vec4 ix = Pi.xzxz; + vec4 iy = Pi.yyww; + vec4 fx = Pf.xzxz; + vec4 fy = Pf.yyww; + + vec4 i = permute(permute(ix) + iy); + + vec4 gx = fract(i * (1.0 / 41.0)) * 2.0 - 1.0 ; + vec4 gy = abs(gx) - 0.5 ; + vec4 tx = floor(gx + 0.5); + gx = gx - tx; + + vec2 g00 = vec2(gx.x,gy.x); + vec2 g10 = vec2(gx.y,gy.y); + vec2 g01 = vec2(gx.z,gy.z); + vec2 g11 = vec2(gx.w,gy.w); + + vec4 norm = taylorInvSqrt(vec4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); + g00 *= norm.x; + g01 *= norm.y; + g10 *= norm.z; + g11 *= norm.w; + + float n00 = dot(g00, vec2(fx.x, fy.x)); + float n10 = dot(g10, vec2(fx.y, fy.y)); + float n01 = dot(g01, vec2(fx.z, fy.z)); + float n11 = dot(g11, vec2(fx.w, fy.w)); + + vec2 fade_xy = fade(Pf.xy); + vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x); + float n_xy = mix(n_x.x, n_x.y, fade_xy.y); + return 2.3 * n_xy; +} + +// Classic Perlin noise, periodic variant +float pnoise(vec2 P, vec2 rep) +{ + vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0); + vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0); + Pi = mod(Pi, rep.xyxy); // To create noise with explicit period + Pi = mod289(Pi); // To avoid truncation effects in permutation + vec4 ix = Pi.xzxz; + vec4 iy = Pi.yyww; + vec4 fx = Pf.xzxz; + vec4 fy = Pf.yyww; + + vec4 i = permute(permute(ix) + iy); + + vec4 gx = fract(i * (1.0 / 41.0)) * 2.0 - 1.0 ; + vec4 gy = abs(gx) - 0.5 ; + vec4 tx = floor(gx + 0.5); + gx = gx - tx; + + vec2 g00 = vec2(gx.x,gy.x); + vec2 g10 = vec2(gx.y,gy.y); + vec2 g01 = vec2(gx.z,gy.z); + vec2 g11 = vec2(gx.w,gy.w); + + vec4 norm = taylorInvSqrt(vec4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); + g00 *= norm.x; + g01 *= norm.y; + g10 *= norm.z; + g11 *= norm.w; + + float n00 = dot(g00, vec2(fx.x, fy.x)); + float n10 = dot(g10, vec2(fx.y, fy.y)); + float n01 = dot(g01, vec2(fx.z, fy.z)); + float n11 = dot(g11, vec2(fx.w, fy.w)); + + vec2 fade_xy = fade(Pf.xy); + vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x); + float n_xy = mix(n_x.x, n_x.y, fade_xy.y); + return 2.3 * n_xy; +} + +float stroke(in float x_coor, float s, float width){ + float d = step(s,x_coor+width*.5)-step(s,x_coor-width*.5); + return clamp(d, 0.,1.); +} + +float circleSDF(vec2 st) { return length(st-.5)*2.; } void main() { vec2 st = gl_FragCoord.xy/u_resolution; - vec3 color = vec3(0.0,0.0,0.0) - gl_FragColor = vec4(color, 1.0); + float color = sin(u_time)*cos(u_time)/u_time*st.x; + float alpha = 1.0; + vec2 off = vec2(.2); + float md = sin(u_time); + int it = 8; + for (int i = 0; i