Old school 3D engine from scratch in C.
# Install C tooling and SDL2
sudo apt install build-essential
sudo apt install libsdl2-dev
# Build the project
make release=1
# Run the project
./bin/linux/release/expresso
- My notes on rendering pipeline from Pikuma's course: notes
- My notes on parallel programming from Carnegie Mellon University: notes
- For the next learning topic, see branch: dev
In a non-chronological order, here are the logs of the development. This is what I want to explore and learn. Keep in mind that the project is still in progress and a learning exercise.
- Drawing to the screen
- Basic 3D asset
- Rendering Loop
- CPU rasterization
- Backface culling
- Frustum clipping
- Subpixel rasterization
- Lighting
- Basic Lightnight
- Advanced shadding
- Ditchering to achieve shading (could be a cool background with retro look)
- Gouraud shading
- Phong Model
- Texture
- Camera
- Basic FPS camera
- Basic Look-at camera
- Mouse input
- Game Engine Architecture
- Highly recommended (demo assets from it): Pikuma's course on 3D Computer Graphics.
- Perspective-Correct Interpolation
- Parallel Rasterization
- fgiesen blog
To Check:
- Foundations of Game Engine Development
- Graphics Programming Black Book
- Texture Mapping Technical Articles
- Rasterization Rules & the Edge Function
- Rasterization Rules
- CUDA C Programming
- Parallel Computer Architecture and programming
- Computer Graphics at Carnegie Mellon University
- TheNumbat's list
C ressources:
- How I program C
- Build your own Lisp
- Fedor Pikus's talks
- Cache Effect
- Perf Profiler, check orbit
- Valgring