第 12 课:Line Circle Intersection
我的解
uniform float iTime;
uniform vec2 iResolution;
void main() {
vec2 uv = gl_FragCoord.xy / iResolution.xy;
uv *= 2.0;
uv -= 1.0;
uv.x *= iResolution.x / iResolution.y;
float lineX = sin(iTime * 0.5);
float thickness = 0.3;
float line = 1.0 - smoothstep(thickness, thickness + 0.01, abs(lineX - uv.x));
vec2 circleCenter = vec2(cos(iTime * 0.5), 0.0);
float circleRadius = 0.5;
float circle = 1.0 - smoothstep(0.49, circleRadius, distance(circleCenter, uv));
float dist = distance(vec2(lineX, 0.0), circleCenter);
float intersect = step(dist, 0.5+0.3); // FIX IT
vec3 shapeColor = mix(vec3(0.38, 0.12, 0.93), vec3(1.0, 0.3, 0.3), intersect);
vec3 result = mix(vec3(0.12), shapeColor, clamp(line + circle, 0.0, 1.0));
gl_FragColor = vec4(result, 1.0);
}