Hi! I long ago started making a software renderer in python to learn the process of triangle rasterisation, transformations, lighting and so on. It uses a flat shading model and now can read simple .obj files, as long as the face data is simple e.g f 23 24 56 and not f 23/24/23 23/23/23 67/67/67 etc.
Anyone, it is a little buggy, as you can see from this screenshot. I've looked at my culling techniques and render order, and it seems ok, but still looking a little strange. If you are interested, please download my project from here and play around with it, critique it, make suggestions, and even better work on it yourself and extend it, be my guest!