From 3c21556ef64541274968ddcd0931898cc58a1ef2 Mon Sep 17 00:00:00 2001 From: polyfloyd Date: Sat, 19 May 2018 14:47:40 +0200 Subject: [PATCH] Add chebyshev.glsl --- chebyshev.glsl | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 chebyshev.glsl diff --git a/chebyshev.glsl b/chebyshev.glsl new file mode 100644 index 0000000..52fcff1 --- /dev/null +++ b/chebyshev.glsl @@ -0,0 +1,54 @@ +float chebyshev(float x, int n){ + const int MAX_POWER = 16; + vec2 tvec = vec2( 1., x); + mat2 m = mat2 (0., -1., 1., 2.*x); + for( int i = 2; i < MAX_POWER; i += 1){ + if( i > n ) return tvec.y; + tvec = m*tvec; + } + return tvec.y; +} + +//https://github.com/hughsk/glsl-hsv2rgb/blob/master/index.glsl +vec3 hsv2rgb(vec3 c) { + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +void mainImage( out vec4 fragColor, in vec2 fragCoord ) +{ + vec2 uv = fragCoord / max(iResolution.x, iResolution.y); + uv *= 2.5; + uv.x -= 1.2; + uv.y -= 0.5; + + float timex = iTime * .21; + float tx = cos(timex)*chebyshev(uv.x, 2) + sin(timex)* chebyshev(uv.x, 5) ; + float timey = iTime * 0.2; + float ty = cos(timey)*chebyshev(uv.y, 3) + sin(timey)* chebyshev(uv.y, 7) ; + + float t2 = iTime * .5; + float csigma = cos(t2); + float s2sigma = 1. - csigma*csigma; + //next formula was taken from this paper + //http://boj.pntic.mec.es/~jcastine/Trabajos%20matematicos_archivos/cmj122-127.pdf + float b = tx*tx + ty*ty - 2.0*tx*ty*csigma + s2sigma; + float w = 3.*fwidth(b); + //float w = .2; + + b *= 2.; + float bFloor = floor(b); + b = smoothstep(w,0.,abs(fract(b) -.5))/fwidth(b); + + //b*= step(abs(uv.x), 1.); + //b*= step(abs(uv.y), 1.); + + vec3 color = hsv2rgb(vec3(bFloor/10.+fract(iTime*0.1),1.,1.)); + + color *= b; + + fragColor = vec4(color, 1.0); +} + +// https://www.shadertoy.com/view/MtBBRG