I wanted to learn more about computer graphics, so I'm writing a 3D software renderer in C. So far I have a solid implementation of triangle rasterization, perspective projection, depth buffer, clipping, texture mapping, diffuse lighting, and gamma correction. Currently struggling with shadow mapping, which is the last feature I'll add to the renderer before moving on to procedural generation of meshes and textures.
Once I'm done with this project I'm planning on making a series of YouTube videos going into the code and the algorithms.