/** Bounded box clipped by extent * (crude, could fix, see Realistic Ray Tracing by Shirley p. 22) * @author: Phil Gage */ class Box extends AbstractObject { Extent extent; BoundedPlane sides[] = new BoundedPlane[6]; Intersection tempIntersection = new Intersection (); /** Create box */ Box (Extent extent, Color color) { super(color); this.extent = extent; sides[0] = new BoundedPlane ( extent.max, new Vector3 (0,0,1), extent, color); sides[1] = new BoundedPlane ( extent.max, new Vector3 (1,0,0), extent, color); sides[2] = new BoundedPlane ( extent.min, new Vector3 (0,0,-1), extent, color); sides[3] = new BoundedPlane ( extent.min, new Vector3 (-1,0,0), extent, color); sides[4] = new BoundedPlane ( extent.min, new Vector3 (0,-1,0), extent, color); sides[5] = new BoundedPlane ( extent.max, new Vector3 (0,1,0), extent, color); } /** Returns positive if ray intersects box */ double intersect (Ray ray, Intersection intersection) { double dist, t = Constants.INFINITY; intersection.obj = null; for (int i=0; i<6; i++) { dist = sides[i].intersect (ray,tempIntersection); if (dist > 0.0 && dist < t) { t = dist; intersection.set(tempIntersection); intersection.obj = this; } } if (intersection.obj == null) return 0.0; else return t; } Extent getExtent () { return extent; } }