
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.
Features
- 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.
Images
Source Repo
Bitbucket
Download
Executable and Source Code (4MB)
Notes
- 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).
