From: Lukas Jiriste Date: Fri, 3 Jan 2025 23:34:44 +0000 (+0100) Subject: Stop cylinder from filtering "wrong" intersections X-Git-Url: https://git.ljiriste.work/?a=commitdiff_plain;h=a0f1988520de520f5ebacdca097a14602756cd4b;p=42%2FminiRT.git Stop cylinder from filtering "wrong" intersections --- diff --git a/src/scene.c b/src/scene.c index c73ec34..44fb0b5 100644 --- a/src/scene.c +++ b/src/scene.c @@ -130,13 +130,11 @@ t_vec get_intersection_arg_cylinder_base base.point = vec_add(cylinder->center, vec_real_mul(cylinder->rot_axis, cylinder->height / 2)); base.normal = cylinder->rot_axis; arg = get_intersection_arg_plane(ray, &base); - if (vec_norm(vec_diff(base.point, ray_point(ray, arg))) <= cylinder->radius - && vec_scalar_mul(ray->direction, vec_diff(cylinder->center, base.point)) > 0) + if (vec_norm(vec_diff(base.point, ray_point(ray, arg))) <= cylinder->radius) ft_vec_append(&res, &arg); base.point = vec_diff(cylinder->center, vec_real_mul(cylinder->rot_axis, cylinder->height / 2)); arg = get_intersection_arg_plane(ray, &base); - if (vec_norm(vec_diff(base.point, ray_point(ray, arg))) <= cylinder->radius - && vec_scalar_mul(ray->direction, vec_diff(cylinder->center, base.point)) > 0) + if (vec_norm(vec_diff(base.point, ray_point(ray, arg))) <= cylinder->radius) ft_vec_append(&res, &arg); return (res); } @@ -174,12 +172,10 @@ t_vec get_intersection_arg_cylinder_around args = solve_quadratic(vec_scalar_mul(v, v), 2 * vec_scalar_mul(v, u), vec_scalar_mul(u, u) - cylinder->radius * cylinder->radius); intersect = ray_point(ray, args.first); - if (fabs(vec_scalar_mul(cylinder->rot_axis, vec_diff(intersect, cylinder->center))) < cylinder->height / 2 - && vec_scalar_mul(vec_vec_mul(cylinder->rot_axis, ray->direction), vec_vec_mul(cylinder->rot_axis, vec_diff(cylinder->center, intersect))) > 0) + if (fabs(vec_scalar_mul(cylinder->rot_axis, vec_diff(intersect, cylinder->center))) < cylinder->height / 2) ft_vec_append(&res, &args.first); intersect = ray_point(ray, args.second); - if (fabs(vec_scalar_mul(cylinder->rot_axis, vec_diff(intersect, cylinder->center))) < cylinder->height / 2 - && vec_scalar_mul(vec_vec_mul(cylinder->rot_axis, ray->direction), vec_vec_mul(cylinder->rot_axis, vec_diff(cylinder->center, intersect))) > 0) + if (fabs(vec_scalar_mul(cylinder->rot_axis, vec_diff(intersect, cylinder->center))) < cylinder->height / 2) ft_vec_append(&res, &args.second); return (res); }