跳到主要内容
← Math

Math

Line Circle Intersection

shader-learning 自学第 12 课:Line Circle Intersection

实时渲染 · 2D 片段 GLSL

第 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);
}