Stephen DiVerdi

Computer Science Portfolio

HMC CS155 Computer Graphics

The course summary for CS155 from our catalog describes the class in these terms.

In CS155, we study the fundamental ideas behind 3D graphics systems. We begin with a study of digital images and digital image processing. Then we study the two key processes in computer graphics: modeling and rendering. Modeling is the process of describing 3D objects. We will study a variety of models including polygon meshes, splines, and nurbs as well as some techniques from procedural modeling. Rendering is the process by which the model of a 3D scene is converted to a 2D digital image. We will study each step of the rendering pipeline including model and viewing transformations, hidden surface removal, rasterization, and shading and lighting.

Project 1 - 2D Image Processor - This project was an introduction to image processing. We implemented interpolation and convolution as the basis for a number of image manipulation features (blur, brightness / contrast, edge detect, saturation, etc.), and then experimented with dithering, non-linear warps, and morphing.

Source Image
Ripple - period = 20, amplitude = 20
Mosaic - size = 8
Edge Detect
Dots - frequency = 0.1

Project 2 - Ray Tracer - This project was an introduction to ray tracing, the final result being a fairly well-featured ray tracer. We implemented a variety of primitives, with texture mapping, as well as reflection and transparency with refraction, jittering, fuzzy shadows and colored projections.

Textured Primitive - closed cylinder with texture map
Refraction - transparent sphere in front of textured sphere
Reflection - textured sphere and two mirrors
Projection - white sphere and plane, with light cast behind a texture-mapped transparent filter

Refraction Movie - transparent sphere moving in front of colored sphere

Project 3 - Polygon Renderer - This project was a comprehensive look at the OpenGL rendering pipeline, which resulted in a complete implementation, from .ply file to rendered image. The renderer can handle flat and smooth shading, depth buffering, clipping, transformations, orthographic and perspective projection, point and directional lighting with diffuse and specular contributions, anti-aliasing and texture mapping

Cube - flat shaded, perspective
Cube - smooth shaded, perspective
Cube - smooth shaded, with two lights, orthographic

Project 4 - OpenGL Robot - This project was an introduction to the OpenGL interface. The goal was to create a robot in a 3D world, as a way to learn the details of programming in OpenGL. Features implemented include reflective floor, simple shadows, a mirror object, transparent objects, robot-head camera and third-person camera, mobile lights (spotlight attached to robot's head), heirarchical robot control (fully articulated arm), and robot animation (he jumps!).

Source - the source is a good example of my coding abilities
Jump Movie - a quick movie of the camera panning and robot jumping (a little dark)

Final Project - Cloth Modeling - For a final project I chose to model cloth with a mass and spring particle system. The result is an OpenGL application with a cloth object that can interact with the environment in some limited ways. I focused on keepin the simulation interactive, so it has one major omission - internal collision detection. The cloth will pass right through itself, because I was unable to devise a technique to handle internal collisions in realtime (I came close, but not quite close enough). The cloth can handle collisions with the floor and with a sphere, and is affected by gravity and optionally by (non-turbulent) wind.

Source - I'm particularly proud of the source for this project