perfect sin wave (complex version)

Download Perfect Sin Wave (Complex Version)

If you can't read please download the document

Upload: nguyen-hong-nhat

Post on 15-Nov-2015

213 views

Category:

Documents


0 download

DESCRIPTION

Sin wave glsl shader

TRANSCRIPT

float PI = 3.1415926;float t = iGlobalTime*.01;float formula(float x){return .3 * sin(10.0*PI*(-t+x));}void mainImage( out vec4 fragColor, in vec2 fragCoord ){vec2 uv = fragCoord.xy / iResolution.xy;float px = 1.0/ iResolution.x;float py = 1.0 / iResolution.y;vec4 color = vec4(1.0,1.0,1.0,1.0);if ( abs(uv.x-.5) < px || abs(uv.y-.5) < py) color= vec4(0.0,0.0,1.0,1.0);if ( mod(abs(uv.y*10.0 + py*5.0), 1.0) < py * 10.0) {if (abs(uv.x-.5) < px * 10.0)color= vec4(0.0,0.0,1.0,1.0);elsecolor= vec4(0.8,0.8,1.0,1.0);}if (mod(abs(uv.x*10.0 + px*5.0), 1.0) < px * 10.0) {if (abs(uv.y-.5) < py * 10.0)color= vec4(0.0,0.0,1.0,1.0);elsecolor= vec4(0.8,0.8,1.0,1.0);}float x = (uv.x - .5);float y = formula(x);float y2 = formula(x + px*.5);float dy = max(px*4.0, abs(y2 - y));float modX = floor(.5+10.0*(uv.x-.5)) / 10.0;float fmodX = formula(modX);// 2d samples// ok but wonky and horribly inefficientfloat avg = 0.0;float screen_y = 0.0;float stroke = 3.0;float dist = 0.0;for (float step_x = -1.0; step_x < 1.0; step_x += .1){x = (uv.x - .5 +stroke*(-step_x)*px);for (float step_y = -1.0; step_y < 1.0; step_y += .1){y = formula(x);screen_y = uv.y + stroke*(-step_y)*py;dist = step_x*step_x + step_y*step_y;dist /= stroke*stroke;avg += (1.0 - min(1.0,(abs(screen_y-.5 - .5*y)/py))) /dist;}}avg /= 100.0;color.r -= avg;color.g -= avg;color.b -= avg;fragColor = color;}