in src/Algorithm/fractals.c [483:512]
bool intersectBoundingSphere(vec3 origin,
vec3 direction,
out float tmin,
out float tmax)
{
bool hit = false;
float b = dot(origin, direction);
float c = dot(origin, origin) - boundingRadius;
float disc = b*b - c; // discriminant
tmin = tmax = 0.0;
if (disc > 0.0) {
// Real root of disc, so intersection
float sdisc = sqrt(disc);
float t0 = -b - sdisc; // closest intersection distance
float t1 = -b + sdisc; // furthest intersection distance
if (t0 >= 0.0) {
// Ray intersects front of sphere
tmin = t0;
tmax = t0 + t1;
} else if (t0 < 0.0) {
// Ray starts inside sphere
tmax = t1;
}
hit = true;
}
return hit;
}