evg

Простые metaball-ы :)
В этом эффекте цвет точки вычисляется относительно расстояния от точки до центра шарика:




  dx = x - pos[0];
  dy = y - pos[1];
  dist = sqrt (dx * dx + dy * dy);
  сolor = size / pow(dist, 2);


Старт | Стоп

Реализация на GLSL


void main()
{
float sw = iResolution.x/2.0, sh = iResolution.y/2.0;
float mbsize[5];
mbsize[0]=100.;
mbsize[1]=200.;
mbsize[2]=300.;
mbsize[3]=400.;
mbsize[4]=500.;
float c=cos(iGlobalTime), s=sin(iGlobalTime);	
vec2 mbpos[5];
vec2 pos = gl_FragCoord.xy;
mbpos[0] = vec2(c * 100. + sw, -s * 100. + sh);
mbpos[1] = vec2(-c * 40. + sw, s * 100. + sh);
mbpos[2] = vec2(c * 100. + sw, s * 40. + sh);
mbpos[3] = vec2(-c * 110. + sw, -sin(iGlobalTime * 0.25) * 110. + sh);
mbpos[4] = vec2(-cos(iGlobalTime * 0.33) * 300. + 350., sin(iGlobalTime * 1.5) * 150. + sh);

 float dist = 0.0;
 for(int i=0; i<5; i++)
    dist += mbsize[i]/pow(distance(pos.xy, mbpos[i]),2.0);
  gl_FragColor = vec4(1.0-dist,dist,1.0-dist,1.0);

}


Коментарии