float x, y, z;
float nx, ny, nz;
csg_object *o;
+};
+
+struct hinterv {
+ struct hit end[2];
+ csg_object *o;
- struct hit *next;
+ struct hinterv *next;
};
-struct hit *alloc_hit(void);
-void free_hit(struct hit *hit);
-void free_hit_list(struct hit *hit);
-struct hit *ray_intersect(struct ray *ray, csg_object *o);
+struct hinterv *alloc_hits(int n);
+void free_hit(struct hinterv *hv);
+void free_hit_list(struct hinterv *hv);
+
+struct hinterv *ray_intersect(struct ray *ray, csg_object *o);
-struct hit *ray_sphere(struct ray *ray, csg_object *o);
-struct hit *ray_cylinder(struct ray *ray, csg_object *o);
-struct hit *ray_plane(struct ray *ray, csg_object *o);
-struct hit *ray_csg_un(struct ray *ray, csg_object *o);
-struct hit *ray_csg_isect(struct ray *ray, csg_object *o);
-struct hit *ray_csg_sub(struct ray *ray, csg_object *o);
+struct hinterv *ray_sphere(struct ray *ray, csg_object *o);
+struct hinterv *ray_cylinder(struct ray *ray, csg_object *o);
+struct hinterv *ray_plane(struct ray *ray, csg_object *o);
+struct hinterv *ray_box(struct ray *ray, csg_object *o);
+struct hinterv *ray_csg_un(struct ray *ray, csg_object *o);
+struct hinterv *ray_csg_isect(struct ray *ray, csg_object *o);
+struct hinterv *ray_csg_sub(struct ray *ray, csg_object *o);
void xform_ray(struct ray *ray, float *mat);