Barebones Renderer

This is the oldest university project in my portfolio, completed during my second year. The goal was to build a renderer from scratch in C++ using OpenGL, starting with minimal boilerplate.

I experimented with different styles of lighting and implemented features such as dynamic lights and camera controls. At the time, this project marked a significant shift in how I approached larger codebases, and it played a crucial role in my understanding of 3D graphics and engine programming.

Through building this renderer, I learned how objects are drawn on screen, how normals influence lighting, and how to structure a renderer with object-oriented design in mind. I also improved my C++ skills significantly, moving from simpler SFML based projects to a more advanced and custom engine pipeline.

Looking back, there's a lot I would now do differently; better version control with Git, using CMake to manage builds and dependencies, and maybe integrating some physics to test my knowledge of applied mechanics.

Despite its age, this project represents a foundational step in my development as a game programmer.

Features

• Dynamic Directional Lighting
• Dynamic Point Lights
• Dynamic Spot Lights
• Debug Camera Movement

Controls

• W / A / S / D - Camera Movement
• E / Q - Move camera up / down
• R / B / G - Change all objects colours to red / green / blue
• T - Change all objects back to original texture
• 1 - Toggle normal maps on / off
• 1 - Toggle Directional light on / off
• 1 - Toggle point lights on / off
• 1 - Toggle normal maps on / off
• Left Click / Right Click - Toggle spot light on / off