public static Color trace(Ray r) { Point pt = null; Point nPt; ObjectR oInter = null; double minDist = Double.MAX_VALUE; for (ObjectR o : ObjectR.objects) { nPt = o.intersect(r); double dist = calc.distance(nPt.coord, cam.point.coord); if (dist < minDist) { pt = nPt; minDist = dist; oInter = o; } } if (pt != null) { // Find Light source for (Light s : Light.lights) { Ray shadow = new Ray(pt.coord, s.dim); for (ObjectR oShadow : ObjectR.objects) { if (!Light.lights.contains(oShadow) && oShadow.intersect(shadow) != null) { if (oShadow == oInter) { return shade(oInter, pt, s, cam); } else { return black; } } } return shade(oInter, pt, s, cam); } } return background; }