수식

코드
uniform vec3 uResolution;
uniform float uTime;
uniform vec4 uMouse;
// v = a -> 0
// v = b -> 1
// v = (a+b)/2 -> 0.5
float remap01(float a, float b, float v) {
return (v - a) / (b - a);
}
void main() {
vec2 uv = (gl_FragCoord.xy - .5 * uResolution.xy) / uResolution.y;
vec3 col = vec3(0);
vec3 Ro = vec3(0);
vec3 Rd = normalize(vec3(uv.x, uv.y, 1.));
vec3 S = vec3(0, 0, 3);
float R = 1.;
float tp = dot(S - Ro, Rd);
vec3 Ptp = Ro + Rd * tp;
float y = length(S - Ptp);
if(y < R) {
float x = sqrt(R*R - y*y);
float t1 = tp - x;
float t2 = tp + x;
float c = remap01(S.z, S.z - R, t1);
col = vec3(c);
}
gl_FragColor = vec4(col, 1.0);
}
결과
