Update README
This commit is contained in:
parent
ab9675508a
commit
aee55ce4ae
39
README.md
39
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.
|
||||
|
||||
|
|
Loading…
Reference in New Issue