Simplify the ray-sphere intersection code
This commit is contained in:
parent
647abd385d
commit
6352cbf0fd
6
main.c
6
main.c
@ -10,13 +10,13 @@
|
|||||||
double hit_sphere(point3 center, double radius, ray r) {
|
double hit_sphere(point3 center, double radius, ray r) {
|
||||||
vec3 oc = point3_sub(r.origin, center);
|
vec3 oc = point3_sub(r.origin, center);
|
||||||
double a = vec3_length2(r.direction);
|
double a = vec3_length2(r.direction);
|
||||||
double b = 2 * vec3_dot(oc, r.direction);
|
double half_b = vec3_dot(oc, r.direction);
|
||||||
double c = vec3_length2(oc) - radius * radius;
|
double c = vec3_length2(oc) - radius * radius;
|
||||||
double discriminant = b * b - 4 * a * c;
|
double discriminant = half_b * half_b - a * c;
|
||||||
if (discriminant < 0)
|
if (discriminant < 0)
|
||||||
return -1.0;
|
return -1.0;
|
||||||
else
|
else
|
||||||
return (-b - sqrt(discriminant)) / (2.0 * a);
|
return (-half_b - sqrt(discriminant)) / a;
|
||||||
}
|
}
|
||||||
|
|
||||||
color ray_color(ray r) {
|
color ray_color(ray r) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user