Project 1: Heightfields The idea is to take a grayscale JPEG height data image and turn it into a three dimensional view of the terrain the image represents. Below are some screenshots produced by my program. |
Project 2: Mobile Animation The objective of this project was to create a hierarchical model of a mobile, similar to those hung over babies' cribs. In addition we had to cast a shadow of the mobile on the ceiling of the room in which the mobile exists. My specific implementation not only was a hierarchical model, but a highly structured object oriented solution in C++. The code code for my program is an object library named olib which allows for dynamic construction of mobiles in an object recursive type fashion. Screen Shots Source Code |
Project 3: Roller Coasters The main focus of this assignment was the rendering of a particular class of cubic splines called the Catmull-Rom spline. A Catmull-Rom spline is a spline that interpolates all but the first and last control points, and also enforces a condition on the derivative at each control point. My implementation will take a track with any number of splines associated with it, and render the track with the ability to ride it. In addition, it comes with the option of generating random roller coasters as well. The "goodtrack" coaster was randomly generated by the program. Screen Shots Source Code |
Project 4: Ray Tracer This is the first 3D graphics program I have ever done without the use of OpenGL. The object of this assignment was to create a program that rendered 3D scenes using a technique known as ray tracing. Ray tracing works by casting mathematical rays from each pixel of the screen buffer and calculating how the ray interacts in the scene. The color value of the ray is determined using the Phong lighting and shading model when an intersection of a ray and object is determined. My particular program was built in an object oriented structure (I can't code any other way anymore after TAing 211 twice...) which allowed for component wise construction of "custom" ray tracers. The "simple" ray tracer supported Phong shading, texture mapping, recursive ray tracing for reflections and refraction, and flat shadows. Reflection, refraction, and shadows are very easy to implement using ray tracing, all that it is needed is to calculate the reflected, refracted, or shadow ray and recursively ray trace on this new ray. The more advanced "distributed" ray tracer supported the extra features of soft shadows (shadows with an umbra and the so called penumbra), anti-aliasing, motion blur, and the addition of the cylinder and cone primitives. Most of the effects in the "distributed" ray tracer are very difficult to impossible to get using a triangle rasterizing 3D renderer like OpenGL or Direct3D, but are surpisingly not that difficult in the ray tracing system. Description of scenes for the ray tracer was handled in a Scene Description Language (SDL) developed by myself (it needs work). Overall this is the largest program I have ever written for school, it is around 5200 lines of C++. Screen Shots
|