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);
}
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);
}