You may develop on Unix, OS X, or Windows. The platform you use will be the one used to grade assignments. Keep in mind that there are slight variations due to OS versions, different libraries, and other factors, so you should verify that your code runs on the instructional machines appropriate for you plat form choice.
As with the last assignment, we will be using Prof. Hilfinger's submit software for submission of this assignment.
You should include a README file that at the minimum contains the following data:
You will also turn in some images. These should be named "image-nn.xxx" where nn is a number (e.g. 01, 02, 03...) and xxx is an appropriate extension (e.g. tif, jpg, ppm, etc.) The main input files needed to render those images should be named "input-nn". Finally there should be a "notes-nn" file for each input stating: the command line used to produce image-nn, how long it took to run, what features are demonstrated by the image, any other comments you'd like to add about the image.
Windows: The grader should be able to recompile your program by simply opening the project and rebuilding it from scratch.
Unix and OS X: The grader should be able to recompile your program simply by typing "make".
Do not wait until the last minute to start this assignment. Even a minor bug in a ray tracer typically produces a black image with no other clue about what is wrong... that makes them very hard to debug. If you don't give yourself enough time, you will be most unhappy.
Check the news group regularly for updates on the assignment or
other clarification. We will assume that anything posted there is
henceforth known to all.
The input file can be in any format you like. You are responsible for coming up with something reasonable and creating inputs for interesting images. An input may consist of multiple files. We recommend starting with the input format used for assignment 3 since you already have a parser for this format. However, you will want/need to make some changes to this format, like including Krefl, the reflection coefficient. Also, it is easier to specify the camera as a center of projection (eye) point and the four corners of the image plane.
Your output needs to be in a standard image format that most image viewers can read. Suggested formats are: JPEG, TIFF, PNG or PPM. Do not use an indexed color format. You can write your own code to write the files or you can use a standard library. PPM is very easy to write, but offers no compression. JPEG, TIFF, and PNG are supported by many standard libraries. (libTIFF, libPNG, ImageMagik, nd many others) You are responsible for figuring out how to use these libraries.
Your images should be at least 640x480 and no more than 1280x1024.