
OVERVIEW
What started as an exploration of simple shapes quickly became a deep understanding of how pixels, light, and math interact. Through these projects, I developed a strong visual intuition, practiced debugging complex systems, and learned to write code that feels like animation, clean, structured, and expressive.
KEY TOPICS
2D & 3D transformations
Projection and perspective
Ray tracing (shadows, reflections, lighting models)
Object modeling and animation
Shaders & GPU programming (GLSL)
Surface meshes and duals
Flat vs. smooth shading
Coordinate systems & matrix math
Project 1
Projection & Line Drawing 🖊️

I mapped user-defined lines onto a 2D screen using transformations, projection, and coordinate math.
Project 2
Object Modeling & Animation 🧱

I first built a vacuum cleaner from composite objects using a matrix stack to manage hierarchical transforms.

Then, I animated a full scene of vacuum cleaners moving around the floor with object motion and camera transitions.
Project 3
Ray Tracing, Shadows & Reflections 🔦

This project focused on the key concepts of ray tracing. First, I wrote a ray tracing renderer to simulate light-object interactions with cylinders and diffuse shading.

With the foundations in place, I expanded my ray tracing renderer to introduce spheres, recursive reflections, shadows, and a richer lighting model with ambient and specular components.
Project 4
GPU Programming (Shaders) 🎮

In this project, I developed a custom vertex and fragment shaders in GLSL to create animated textures and procedural effects. This was my intro to GPU-based thinking — fast, flexible, and wildly creative.
Project 5
Dual Meshes & Surface Shading 🔺

In this project, I built a tool to modify polyhedral models, generating their dual meshes and allowing toggles between flat and smooth shading. Using simple triangle bases, I was able to generate a wide variety of fun, interactive polyhedral models.
Learnings
These projects taught me how to go deeper than surface-level visuals with graphics in order to build the systems that make those visuals possible. These projects taught me so much, including
Debugging scenes with no output trained me to problem-solve without a UI safety net.
Ray tracing pushed me to reason about light, geometry, and recursive logic.
Shaders introduced a new level of performance-aware, creative code.
And overall? I learned to build things that are both technical and visual — and to trust my instinct when something looks wrong.
This work sharpened my development skills, but more than that, it taught me how to create beautiful things by understanding their structure.