static int All_Cone_Intersections(OBJECT *Object, RAY *Ray, ISTACK *Depth_Stack) { int Intersection_Found, cnt, i; VECTOR IPoint; CONE_INT I[4]; Intersection_Found = false; if ((cnt = intersect_cone(Ray, (CONE *)Object, I)) != 0) { for (i = 0; i < cnt; i++) { VEvaluateRay(IPoint, Ray->Initial, I[i].d, Ray->Direction); if (Point_In_Clip(IPoint, Object->Clip)) { push_entry_i1(I[i].d,IPoint,Object,I[i].t,Depth_Stack); Intersection_Found = true; } } } return (Intersection_Found); }
int intersect_prim(t_env *e, t_ray *ray, size_t prim, double *t) { if (e->prim[prim]->type == PRIM_SPHERE) return (intersect_sphere(ray, e->prim[prim], t)); if (e->prim[prim]->type == PRIM_HEMI_SPHERE) return (intersect_hemi_sphere(ray, e->prim[prim], t)); if (e->prim[prim]->type == PRIM_PLANE) return (intersect_plane(ray, e->prim[prim], t)); if (e->prim[prim]->type == PRIM_CYLINDER) return (intersect_cylinder(ray, e->prim[prim], t)); if (e->prim[prim]->type == PRIM_CONE) return (intersect_cone(ray, e->prim[prim], t)); if (e->prim[prim]->type == PRIM_DISK) return (intersect_disk(ray, e->prim[prim], t)); return (0); }