Physically Based Ray Tracing in C++
Overview
Ray Tracer is a C++ graphics programming project inspired by the Ray Tracing in One Weekend series. The project demonstrates core rendering techniques including ray-object intersection, camera and scene rendering, lighting calculations, material systems, reflections, and realistic image generation through physically based rendering concepts.
The project was developed to explore the foundations of ray tracing and computer graphics programming, with a focus on how light, surfaces, and camera rays interact to produce rendered images. Rather than relying on a real-time graphics API, Ray Tracer highlights the underlying mathematics and rendering logic behind image generation, including vector operations, shading, reflection behaviour, and scene structure.
My Role
I developed the ray tracing renderer in C++, including the ray-object intersection logic, camera and scene setup, lighting calculations, material systems, and reflection behaviour. I structured the project using object-oriented design principles, keeping rendering components such as rays, objects, materials, and camera logic organised and reusable. My work focused on strengthening my understanding of computer graphics fundamentals, vector mathematics, physically based rendering concepts, and the low-level systems behind realistic image generation.
Key Engineering Features
- Ray-object intersection handling
- Camera and scene rendering system
- Lighting and shading calculations
- Reflection and material behaviour
- Vector mathematics and linear algebra operations
- Object-oriented rendering architecture
- Physically based rendering concepts
- Scene and object management
- Image generation pipeline
- Clean, modular C++ project structure
Technical Highlights
The project demonstrates core computer graphics programming through a C++ ray tracing implementation, including ray-object intersection, camera setup, scene rendering, lighting calculations, materials, and reflection behaviour. Rendering systems are structured using object-oriented design, with rays, objects, materials, and camera logic kept modular and reusable. This structure supports a clear image generation pipeline while strengthening the mathematical foundations behind realistic rendering, including vector operations, surface shading, and physically based light behaviour.
Development Goals
The project was developed to strengthen my understanding of computer graphics, ray tracing fundamentals, and the mathematics behind realistic image generation. A key goal was to explore how rays, surfaces, lighting, materials, and reflections work together to produce rendered scenes. The project also helped improve my ability to structure rendering systems in clean, modular C++, while building a foundation for more advanced graphics programming, physically based rendering, and real-time rendering techniques.
Tools and Technologies
C++, object-oriented programming, ray tracing, computer graphics programming, vector mathematics, linear algebra, ray-object intersection, lighting and shading calculations, material systems, reflections, camera and scene management, physically based rendering concepts, rendering pipelines, and image generation.