Input files will be inputted using a TRACE language (which I just invented... just now). TRACE Commands can appear in any order, and all of them are optional. The ray tracer can even accept a TRACE file with now commands if it wants, though it would probably be a very stupid idea. TRACE Commands include the following: "size [int width] [int height]" - if omitted, default width = 640 and height = 480 "bounces [int num]" - if omitted, defaults to 1 "camera-eye [float x] [float y] [float z]" - if omitted, defaults to (0, 0, 1) "camera-view [float x] [float y] [float z]" - if omitted, defaults to (0, 0, -1) "camera-up [float x] [float y] [float z]" - if omitted, defaults to (0, 1, 0) "camera-fovy [double fovY]" - in radians; if omitted, defaults to PI/6 "camera-near [double near]" - if omitted, defaults to 1 "light-dir [float red] [float green] [float blue] [float xdir] [float ydir] [float zdir]" "light-pos [float red] [float green] [float blue] [float xpos] [float ypos] [float zpos]" "obj-triangle [float v1x] [float v1y] [float v1z] [float v2x] [float v2y] [float v2z] [float v3x] [float v3y] [float v3z]" "obj-picture [float originx] [float originy] [float originz] [float xAxisx] [float xAxisy] [float xAxisz] [float yAxisx] [float yAxisy] [float yAxisz]" "obj-ellipsoid [float centerx] [float centery] [float centerz] [double radius]" "obj-mesh [char *filename]" "set-material-kd [float kdRed] [float kdGreen] [float kdBlue]" - all subsequent objects have the following Diffuse material properties; initially at 0, 0, 0 "set-material-ks [float ksRed] [float ksGreen] [float ksBlue]" - all subsequent objects have the following Specular material properties; initially at 0, 0, 0 "set-material-shininess [int shininess]" - sets the exponent for Specular materials; should be a power of 2; intially at 2 "transform-identity" - all subsequent objects will have no transformation applied to them "transform-rotate [float axisX] [float axisY] [float axisZ] [double angle]" - all subsequent objects will be rotated as follows "transform-scale [float scaleX] [float scaleY] [float scaleZ]" - all subsequent objects will be axis-aligned scaled as follows "translate [float tx] [float ty] [float tz]" - all subsequent objects will be translated as follows; NOTE that because we don't use homogenized coordinates, translations will happen AFTER transformations "bounding-box-off" - turns off bounding boxes; ON by default "bounding-box-on" - turns on bounding boxes; ON by default "texture-off" - all subsequent objects will not use textures "texture-plastic [char *filename]" - all subsequent objects will use the given texture and will have plastic Specular reflections "texture-metallic [char *filename]" - all subsequent objects will use the given texture and will have metallic Specular reflections NOTE that the TRACE file is white space agnostic. We just break up the lines between commands so it's easier for humans to read.