demo效果 : 4-CSDN直播
#define S(a , b , t) smoothstep(a , b, t)
#define HEART_COLOR vec3(1. , .05 , .05)
float smax(float a , float b , float k){
float h = clamp((b-a)/k+.5, 0. ,1.);
return mix(a , b , h) + h*(1. -h)*k*.5;
}
float Heart( vec2 uv , float b){
float r = .25;
b *= r;
uv.x *= .7;
uv.y -= smax(sqrt(abs(uv.x))*.5 , b , 1.);
uv.y += .1+b*.5;
float d = length(uv);
return S(r+b, r-b-.01 , d);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = (fragCoord - iResolution.xy*.5)/iResolution.y;
vec2 m = iMouse.xy/iResolution.xy;
vec3 col = vec3(0);
float c = Heart(uv , m.y);
col = vec3(c*HEART_COLOR);
fragColor = vec4(col,1.0);
}