(* Return the closest base object intersecting the given ray, and the curvilinear abscissa t of the intersection point. Return None if no intersection. Return t = 0.0 if the viewpoint (origin of the ray) is inside an object. boolean true = return first object if ray starts inside boolean false = ignore first object if ray starts inside. *) val intersect_ray: Point.t -> Vector.t -> Object.t -> bool -> (float * Object.base_object) option