float __divsf3(float a, float b) { float_t fa; float_t fb; float_t res; fa.val = a; fb.val = b; res.data = div_float(fa.data, fb.data); return res.val; }
float inter_sphere(t_obj *object, t_ray *ray, t_inter *inter) { t_sphere *sphere; t_vect pos; float tmp; sphere = (t_sphere*)(object->obj); tmp = calc_polynomial(sphere, ray); if (tmp != -1) { pos = add_vect(ray->o, mult_float(ray->dir, tmp)); tmp = magnitude(sub_vect(pos, ray->o)); if (inter->dist == -1 || tmp < inter->dist) { inter->pos = pos; inter->normal = div_float(sub_vect(inter->pos, sphere->c), sphere->r); inter->dist = tmp; inter->obj = object; } } return (tmp); }