A simple 3D software renderer built in C++ from scratch without using OpenGL, DirectX or Vulkan. Only dependencies are for graphics output and image (texture) loading.
This project is heavily inspired from Tinyrenderer. I created this to get a deeper understanding of 3D Graphics and OpenGL pipeline along with solidifying my concepts of C++ programming.
- 3D Software Rasterization pipeline
- Parallelized renderer (using OpenMP)
- Extendable vertex and fragment shaders using C++ virtual functions
- Tangent space normal texture mapping
- Backface culling
- Perspective correct interpolation in fragment shaders
- Hidden faces removal using Z-buffer
- Implementations of Flat, Gouraud, Phong and Normal map shaders.
- SFML Backend for graphics output
- Camera movement around an axis
- Obj model parser
- Templated vector and matrix math library
- Texture loading (using stbimage)
- Add Scene loader for loading multiple objects
- Camera control in every directions (currently it has only orbiting controls)
- PBR Shading
- Ambient Occlusion
- Shadows