This application was developed for my Graphics 1 module, in the second year while at the University of Derby. The project and a fragment of it’s code was based on the SketchPad of which I developed first. The whole idea behind the 3D renderer was to understand the principles of 3D and the process of displaying a 3D model, which meant that we had to understand the geometry pipeline, polygon drawing, back-face culling and other required processes to create the illusion of a 3D object. The software also had to be able to load common .OBJ files and store them to be ready to be able to render and we was limited to using C++ and Win32 GDI only.


  • Completely software based and running on either my own code or well-known theories/algorithms.
  • The only GDI functions used are SetPixel(), BitBlt() and StretchBlt().
  • Basic .OBJ file loading.
  • It has the ability to render multiple objects in the perspective view.
  • Uses back-face polygon culling.
  • Polygon clipping when they are out of view.
  • Lighting – Blinn-Phong’s theory (Ambient, Diffuse and Specularity).
  • Polygon (flat) and vertex (smooth – Gouraud) shading using a self-developed scanline algorithm.
  • Basic perspective texturing for the cube model.
  • All objects, camera and lighting can be moved and rotated at real-time.
  • Most rendering, object and lighting properties can be modified at real-time.
  • Polygon depth sorting (Painter’s algorithm).
  • A 60 second demonstration function.
  • Keyboard hot-keys implemented.


This slideshow requires JavaScript.

Source Repo



Executable and Source Code (4MB)


  • Being that it is a software renderer, it does not produce amazingly fast speeds compared to modern 3D games and applications. It also has a frame rate limit of around 60FPS (depending on the PC’s hardware).