The jonki

呼ばれて飛び出てじょじょじょじょーんき

GLSLでメタボール

GLSL Sandboxを使ってメタボールみたいなものを書いてみました。
全(x, y)座標に対して2点pos1とpos2との距離を計算して、その逆数を取って適当な値(size)をかけます。累乗の値で輪郭がぽわっとしたり、くっきりしたり。


http://glsl.heroku.com/e#7885.2

#ifdef GL_ES
precision mediump float;
#endif

uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

float w = resolution.x;
float h = resolution.y;

void main( void ) {
	float move = w / 10.0;
	vec2 pos1 = vec2(w * 0.5 + move * ( sin(time)), h * 0.5);
	vec2 pos2 = vec2(w * 0.5, h * 0.5);
	
	float dist1 = length(gl_FragCoord.xy - pos1);
	float dist2 = length(gl_FragCoord.xy - pos2);
	
	// 円のサイズ
	float size = 25.0;
	
	// distがsize以下であれば累乗根で潰す。
	// この値が大きければsize以上離れている場所は0に近づくのでポワッとしなくなる
	float color = 0.0;
	color += pow(size / dist1, 2.0);
	color += pow(size / dist2, 2.0);
	gl_FragColor = vec4(vec3(color / 2.0, color / 4.0, color / 1.5), 1.0);
}