Software renderer developed from scratch in C++ 11 including a handmade obj loader.
The software renderer is capable to render OBJ files with support for diffuse, normal and specular textures. It additionally implements a shader system that allows to change shaders in runtime. There are six main shaders to show different techniques that can be changed to at any moment by using the function keys(F1-F6): Phong shading, Gouraud Shading, Normal Face illumination, Clamp illumination, Tangent Space Normals as colour and a representation of the zBuffer.
The renderer supports the possibility to scale, transform and rotate the objects in screen. It also allows to move the camera or the light position.
- Since the rendering of complex 3D object in software is an heavy task, the vector operations could be improved by implementing SIMD for the dot product and vector normalization.
- Implement a line sweeping algorithm to replace the bounding box approach. This approach was took in order to increase the clarity of the code but it's of course more expensive.
- Implementation of multithreading for the shader system.
The best two main sources to learn about rasterization: https://github.com/ssloy/tinyrenderer and www.scratchapixel.com. Both of them offer great introduction to 3D rendering.