Assignments
Brush
In Brush you will be implementing various different airbrushes similar to ones found in commercial painting programs such as Adobe's Photoshop. This assignment should give you a good introduction to the kind of C++ programming you will be doing in this course, as well as gently familiarize you with the basic conventions of the support code.
Shapes
This assignment covers one of the earliest steps in the 3D rendering pipeline: object tessellation. For this assignment you will be constructing simple 3D objects (e.g., spheres and cylinders) out of triangles and then displaying them on the screen. All you need to do for this assignment is compute and store the necessary triangles; OpenGL handles the task of drawing them for you. The code written in this assignment will be integral to the success of the assignments that follow.
Camtrans
In this assignment you will write your own linear algebra package which will allow you to easily manipulate points, vectors, and transformation matrices. After using the TA-supplied tester to check your work, you'll get to move on to crafting your own virtual camera. Essentially, this camera will use information about the eye point, viewing direction, et cetera, and produce a transformation matrix to display 3d graphics on our 2d output devices. Once again, the code written in this assignment is absolutely essential to the proper function of later assignments.
Sceneview
At this point you have the ability to display, transform and view 3D objects. The next step is for you to put these tools together to view a scene consisting of arbitrarily positioned objects from an equally arbitrary location.In this assignment, you will build your own viewer for moderately complicated scenes.
Filter
This assignment represents a subset of the functionality that Photoshop has. It is designed to teach you the basics of image processing and anti-aliasing. You will implement different image manipulation operations like edge detection, blur, and image scaling.
Intersect
In this assignment, you will finally break away from OpenGL and write a rendering engine of your own. Using many of your previous projects, you will shoot out rays from the eye of a camera and calculate intersections with primitives in a scene using their implicit equations. This will be the first step in writing a full fledged ray tracer.
Ray
In this assignment, you will extend the basic renderer your wrote in Intersect to support reflections, shadows, texture mapping, and a plethora of other more complicated rendering techniques. At the end of this assignment, you will have written a fully functioning recursive ray tracer.