A full semester of computer graphics implemented from scratch in C++ and OpenGL — no engines, no libraries doing the work. Every algorithm written by hand: rasterization, Phong shading, UV mapping, ray tracing, Perlin noise, and particle physics.
CS3451 is Georgia Tech's foundational computer graphics course. The key constraint that makes this work portfolio-worthy: every project was implemented from scratch in C++ and OpenGL — no game engines, no rendering frameworks, no math libraries doing the heavy lifting. Every matrix, every ray-triangle intersection, every noise function was written by hand.
This depth of implementation builds the kind of graphics understanding that makes engine and renderer work significantly more effective — you know exactly what's happening at every stage of the pipeline because you've had to write it yourself.
The first project built the foundation: drawing 2D primitives (lines, circles, polygons) from scratch using OpenGL, implementing 2D transformation matrices for translation, rotation, and scaling. The "DECIDE" output demonstrates text rendering using custom 2D geometry — each letter constructed from primitives.

Implemented mesh loading and the Loop Subdivision algorithm, which refines triangle meshes by repeatedly splitting edges and repositioning vertices using weighted averages — producing smooth surfaces from low-poly source geometry. The green wireframe view shows the mesh topology clearly across complex real-world models including a baseball cap and an F-22 fighter jet.
Implemented a 3D scene graph system with hierarchical transformations — building and animating entire scenes by composing translation, rotation, and scale matrices across parent-child object relationships. Two full custom scenes were constructed: a Japanese garden with a fountain, benches, and foliage, and a fantasy palace scene with floating particle-like objects and surrounding forest.
Implemented the full Phong lighting model in OpenGL — computing ambient, diffuse, and specular components per-fragment for physically accurate shading. The Stanford Bunny is used as the test subject across multiple light configurations. The specular highlights visible on the bunny's surface are the result of per-fragment specular calculations against multiple light sources, demonstrating the model's ability to produce glossy material appearance.
Implemented UV texture mapping in OpenGL — loading image textures and mapping them onto 3D geometry using UV coordinates. The earth globe demonstrates spherical UV mapping on a sphere with a detailed satellite image texture. A custom Batman logo shape shows texture mapping onto arbitrary planar geometry using a wood/rock texture — both implemented from scratch using OpenGL's texture sampler pipeline.
Implemented a GPU-driven particle system in OpenGL — building an emitter system that spawns, updates, and renders thousands of particles per frame. Each particle carries its own position, velocity, acceleration, lifetime, and color, all updated per-frame using physics integration. The fireworks demo showcases burst emitters with gravity, velocity spread, and color-over-lifetime fading — all computed and rendered in pure OpenGL without any middleware.
Implemented the Perlin noise algorithm from scratch in C++ and used it to drive procedural terrain generation in OpenGL. The noise function produces smooth, coherent randomness that, when sampled across a 2D grid and used as a height map, creates natural-looking terrain with hills, valleys, and varied elevation. The implementation also demonstrates noise at different frequencies and amplitudes (octaves) to control terrain roughness — a technique used in virtually every game with procedurally generated environments.
Implemented a software ray tracer in C++ — computing each pixel's color by casting a ray from the camera through the scene and calculating intersections with geometry, lights, and materials. The implementation handles hard shadows (shadow rays to light sources), specular reflections (recursive ray bouncing), textures, and correct perspective projection. The Dragon Ball Z scene was built specifically to showcase the ray tracer's capabilities: textured spheres with correct shadows cast onto a Perlin-noise-textured floor plane — all intersection math and shading written from scratch.
