From aee55ce4ae5e15bede749e98cdf665f73786bdd0 Mon Sep 17 00:00:00 2001 From: Austin Morlan Date: Thu, 4 Oct 2018 18:45:29 -0700 Subject: [PATCH] Update README --- README.md | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 51c6b7d..f65cd76 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,39 @@ -# soft-3d-engine +# Software 3D Renderer + +## Features + +* OBJ model import +* Depth buffering +* Texture mapping with bilinear filtering +* Lighting (ambient, diffuse, specular) +* Smooth shading + +## Goals + +### Implement basic GPU pipeline in software + +To best learn what a GPU is doing, I wanted to recreate the functionality +of the GPU in software. It's not anywhere near as fast as a GPU of course, +but it's not slow either (for a single model that is relatively low-poly). + +### Simple code + +Coming from a C background, I wanted to use features of C++ that I found made +the code cleaner and easier to understand while avoiding many of the fancier +ones that seemed unnecessary. Primarily I leveraged operator overloading for +vector and matrix operations, and used some simple classes with constructors. + +### Good cache performance + +The biggest bottleneck of modern CPU performance is latency between memory and +the CPU, so I tried to use spatial and temporal locality to keep data in the cache. +Although I chose to go for array-of-structs instead of struct-of-arrays, the +cache miss rate is fairly low. + +### Minimal libraries + +I created my own *very* basic OBJ loader (rather than use `tinyobj`) to better +understand how OBJ files are constructed, along with their respective MTL files. +I also wrote my own linear algebra functions and classes (rather than use `glm`) +to better understand the low-level math operations.