static bool IntersectRayAABB(Ray ray, Bounds inAABB, out float outT0, out float outT1) { outT0 = 0; outT1 = 0; float tmin = -Mathf.Infinity; float tmax = Mathf.Infinity; float t0, t1, f; Vector3 p = inAABB.GetCenter() - ray.GetOrigin(); Vector3 extent = inAABB.GetExtent(); int i; for (i = 0; i < 3; i++) { // ray and plane are paralell so no valid intersection can be found { f = 1.0F / ray.GetDirection()[i]; t0 = (p[i] + extent[i]) * f; t1 = (p[i] - extent[i]) * f; // Ray leaves on Right, Top, Back Side if (t0 < t1) { if (t0 > tmin) { tmin = t0; } if (t1 < tmax) { tmax = t1; } if (tmin > tmax) { return(false); } if (tmax < 0.0F) { return(false); } } // Ray leaves on Left, Bottom, Front Side else { if (t1 > tmin) { tmin = t1; } if (t0 < tmax) { tmax = t0; } if (tmin > tmax) { return(false); } if (tmax < 0.0F) { return(false); } } } } outT0 = tmin; outT1 = tmax; return(true); }