Stop cylinder from filtering "wrong" intersections
authorLukas Jiriste <ljiriste@student.42prague.com>
Fri, 3 Jan 2025 23:34:44 +0000 (00:34 +0100)
committerLukas Jiriste <ljiriste@student.42prague.com>
Fri, 3 Jan 2025 23:34:44 +0000 (00:34 +0100)
src/scene.c

index c73ec34a2ef5164b33fc1ded92d9ac75b3e62856..44fb0b5ca223d544c549fc15b2b211888f9be1ad 100644 (file)
@@ -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);
 }