In this assignment, both undergraduates and graduates will get comfortable with the concept of ray tracing. However, both groups will accomplish this by implementing different techniques.

Undergraduate students:

Graduate students:

Students in both sections are encouraged to check out some of the C++ tutorials that I am working on writing up, that describe some useful features of C++ that you may find useful in this assignment.


  • You should use git to submit all source code files and a working CMakeLists.txt. Do not submit any build files, binary files, or otherwise. The expectation is that your code will be graded by cloning your repo and then executing:
$ mkdir build
$ cd build
$ cmake ..
$ make

Your code must compile on the lab machines in GS 930. Code that does not compile in this way will be given an automatic zero. You will be given one “warning” for the first instance during the semester that it does not compile, but after a zero will occur If you are working on a different environment, please log into these machines and test your code before submitting.

  • Make sure that this build process produces an executable named prog03. You will need to edit CMakeLists.txt accordingly.

  • Please provide a file that provides a text description of how to run your program and any command line parameters that you used. Also document any idiosyncrasies, behaviors, or bugs of note that you want us to be aware of.

  • To summarize, my expectation is that your repo will contain:

    1. A file
    2. Answers to the written questions in a separate directory named written
    3. A CMakeLists.txt file
    4. All .cpp and .h files that you authored and are necessary to compile your code.
    5. (Optionally) any other test images that you want.


Rubrics for each assignment can be found on their respective webpages. Note that this assignment is graded out of 12 possible points instead of the usual 10, and thus the grading scale is out of 120 to reflect these extra points.

Extra Credit

This assignment is not designed in such a way that students of the undergraduate section should also attempt to implement the graduate section. Similarly, graduate students should not attempt to also implement the undergraduate section.

Instead, implementing features above and beyond the specification may result in extra credit, please document these in your README. This might include, but are not limited to, implementing different shape types, material classes, light sources, or shading models. Ray tracers are extremely modular and often a variety of features can be combined in novel ways to create realistic scenes.