scene.org File Archive

File download

<root>­/­parties­/­2015­/­tokyodemofest15­/­glsl_graphics/moving_gummy_2015.zip

File size:
2 167 875 bytes (2.07M)
File date:
2015-02-28 12:03:19
Download count:
all-time: 74

Preview

  • moving_gummy_2015.png 2.07M
  • moving_gummy_2015.txt 1.45K

file_id.diz

#ifdef GL_ES
precision mediump float;
#endif

// moving_gummy_2015 by natade
// Tokyo Demo Fest 2015

#define PI2 6.28318530718

uniform float time;
uniform vec2 resolution;

// rand code by http://glslsandbox.com/e#23104.1
float rand( const float x, const float y, const float seed ){
	return fract( sin( x + y * 0.192837465 ) * 1928374.0 * cos(seed) );
}

vec4 getRandomPoint(const float t) {
	float u = float(int(t)) * 0.001;
	return vec4(
		rand(0.144, 0.15, u + 0.2) * 2.0,
		rand(0.37, 0.17, u) - ((fract(t * 0.1) - 0.5)  * 2.0),
		fract(t),
		u
	);
}

vec3 getColor(vec2 point, const float t) {
	vec4 grp = getRandomPoint(t);
	vec2 center = grp.xy;
	float dist = length(point - center);
	float radius = 0.05;
	float is_inside = step(dist, radius);
	float r = rand(1.0, 4.0, grp.w);
	float g = rand(2.0, 5.0, grp.w);
	float b = rand(3.0, 6.0, grp.w);
	float a = 0.5 - cos(grp.z * PI2) * 0.5;
	return vec3(r, g, b) * is_inside * a;
}

void main( void ) {
	vec2 p = (gl_FragCoord.xy / resolution.xy);
	p.x *= resolution.x / resolution.y;
	vec3 color = vec3(0.0, 0.0, 0.0);
	if(abs(p.y - 0.5) < 0.4) {
		color = vec3(1.0, 0.9, 0.8);
		for(int i = 0;i < 100;i++) {
			vec2 zurashi = vec2(p.x + sin(p.y * 50.0) * 0.02, p.y);
			color -= getColor(zurashi, time * 0.01 * float(i) + float(i));
		}
		color += rand(p.x * 1234.0, p.y * 23.0, time) * 0.1;
		color *= 1.0 - pow(fract(time), 30.0);
	}
	gl_FragColor = vec4(color.xyz, 1.0);
}