In this final assignment you will be adding reflection, i.e. recursive ray tracing, to your existing ray tracing software. This will include the ability to control the depth of recursion, and selection of lights, materials and models such that the reflections are immediately apparent when viewing image.


Grading of this final project will be primarily based a single high quality output image created by your ray tracing program. Specifically, 60 percent of the total grade. This means you have the flexibility, should you wish, to construct models internally using your own model construction code. This is not required, but some students may wish to take advantage of this option. One way you can implement this capability is to default to producing the single best image when no arguements are given to your code

The other 40 percent of the grading will be based upon the four scenes already submitted as part of your previous assignment 4. If you are already entirely satisfied with the performance of the code you turned in for assignment 4, then you need not make any explicit changes. Just make sure your code works as before. As to wether you want to include recursion in these scenes from assignment 4, it is up to you. We will not be looking for reflections in this part of assignment 5. If there are aspsects of the code you submitted for assignment 4 that you felt were not fully satisfactory, you have a chance to correct these issues in assignment 5. To be clear, this does not mean your assignment 4 grade would be changed, but it does mean time spent making improvements will be reflected in the grade for assignment 5.

For most students, time on this assigment will be split between two tasks. First, the mechanics of successfully implementing recursive ray tracing. For details of how this should be done, please use the Sage Notebook illustrations presented in lecture. Second, designing a visually interesting scene where evidence of recursion is clearly visible. At a minimum, somewhere in the scene it should be possible to see object A reflected in object B reflected in object C.


Make a tar file that includes all of the code, camera files, and model files necessary to demonstrate your program. For grading, you must name your executable 'raytracer' and it may take a single scene file as an argument.

If your executable is called with no arguments it should produce a rendering you wish us to grade as your final accomplishment of the semester. Note we are breaking with good software design practices by making the behavior of your code specialized to the case of no arguments. In this case, it is likely your code will operate upon a default file name specifiying the scene; but this is not necessary. You must write your rendered image out as either 'masterwork.ppm' or 'masterwork.png'.

For the portion of this assignment replicating assignment 4, the submitted scene files should be named as scene1.txt, scene2.txt, scene3.txt, and scene4.txt, just as they were before. Again keep in mind that the scene file may containe zero or more model file names that should in turn be loaded.

Two closing notes. First, all files required for your code to successfully render the images called for in this assignment must be included in your submission. Second, there must be a README file giving instructions for compiling and running your code, including exactly how to generate the five rendered scenese called for in this assignment.

Addendum (Last update 11/29/16)

No Addendum at this time.