import graphics.*; //handles low level rendering class RayTracerApplet extends MISApplet { protected int[][][] framebuffer, bgbuffer; //2D array of RGB values protected Sphere[] spheres; protected Light[] lights; protected int[] ambient = {0,0,0}; protected double F = 10; public void initialize() { super.initialize(); framebuffer = new int[H][W][3]; //rgb values bgbuffer = new int[H][W][3]; //rgb values } public void initFrame(long time) { for (int w=0; w= t) continue; //if not, skip it t = t1; //calculate intersection point double[] pos = new double[3]; pos[0] = v.get(0) + t * w.get(0); pos[1] = v.get(1) + t * w.get(1); pos[2] = v.get(2) + t * w.get(2); //System.err.println("pos pt: ("+pos[0]+", "+pos[1]+", "+pos[2]+")"); rgb = spheres[i].shade(pos, lights, ambient); } return rgb; } private void doRayTrace() { double w2 = W/2.0; double h2 = H/2.0; Vector3 v = new Vector3(0, 0, 0); for (int i = 0 ; i < W ; i++) for (int j = 0 ; j < H ; j++) { Vector3 w = new Vector3( (i - w2) / w2, // x (h2 - j) / h2, // y -F // z ); //System.err.println(w); w.normalize(); int[] rgb = rayTrace(v, w); framebuffer[j][i][0] = rgb[0]; framebuffer[j][i][1] = rgb[1]; framebuffer[j][i][2] = rgb[2]; } } }