← Back to Game Projects
C++ · OpenGL · Georgia Tech · CS3451

COMPUTER
GRAPHICS

CS3451 — Georgia Tech C++ OpenGL 8 Projects Complete

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.

2D Graphics Transformations Meshes Subdivision Lighting & Shading Textures Particle Systems Ray Tracing Perlin Noise Animation
01 2D Graphics & Primitives
C++ · OpenGL · Rasterization · 2D Transformations

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.

CS3451 — 2D Graphics: DECIDE text rendered from primitives
DECIDE — custom text rendered from 2D geometric primitives in OpenGL
02 Meshes & Loop Subdivision
C++ · OpenGL · Half-Edge Data Structure · Loop Subdivision Algorithm

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.

CS3451 — Mesh: Baseball cap wireframe mesh CS3451 — Mesh: F-22 fighter jet wireframe mesh
Baseball cap and F-22 jet loaded as triangle meshes and displayed in wireframe mode
Loop Subdivision running in real time — geometry refining progressively from low-poly to smooth surface
03 Transformations & Scene Building
C++ · OpenGL · Scene Graph · 3D Transformations · Animation

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.

CS3451 — Transformations: Fantasy palace scene with floating objects and forest
CS3451 — Transformations: Japanese garden scene with fountain and trees
Video coming soon
Palace scene (hero) and Japanese garden — both built using hierarchical 3D transformation matrices
04 Lighting & Shading
C++ · OpenGL · Phong Model · Ambient · Diffuse · Specular

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.

CS3451 — Phong shading: Stanford bunny with multiple colored light sources CS3451 — Phong shading: Stanford bunny with single light, gold sphere
Stanford Bunny rendered with the Phong lighting model — multiple light source configurations showing ambient, diffuse, and specular components
Rotating light source demonstrating real-time Phong shading — specular highlights and diffuse falloff updating dynamically as the light moves
05 Textures & UV Mapping
C++ · OpenGL · UV Mapping · Texture Sampling · Perlin Noise Textures

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.

CS3451 — Textures: Earth globe and Stanford bunny with texture maps CS3451 — Textures: Custom Batman logo shape with wood/rock texture
Earth globe (spherical UV mapping) and Batman logo (planar UV mapping) — texture pipeline implemented from scratch in OpenGL
06 Particle Systems
C++ · OpenGL · Physics Simulation · Emitters · Lifetime Management

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.

Fireworks particle system — burst emitters with per-particle physics, gravity, velocity spread, and lifetime fading, all in OpenGL
07 Perlin Noise & Terrain Generation
C++ · OpenGL · Perlin Noise Algorithm · Procedural Terrain · Height Maps

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.

Perlin noise terrain generated in real time — noise function implemented from scratch driving a dynamic height map in OpenGL
08 Ray Tracing
C++ · OpenGL · Ray-Object Intersection · Reflections · Shadows

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.

CS3451 — Ray Tracing: Dragon Ball Z spheres with shadows and textures
Ray-traced Dragon Ball Z spheres — textured geometry with hard shadows on a Perlin-noise floor, computed entirely via ray-object intersection math