A purely software (no OpenGL or DirectX) realtime 3D renderer, that I’m trying to build to learn some math and magic behind 3D graphics. It uses raylib for window management and delivering pixels to the screen, but all the rendering is done from scratch in Go with no external libraries.
render-demo.mp4
Result of loading a model of a Doom map converted to OBJ format
For this, you may need a C compiler and additional dependencies required by raylib. See https://github.com/gen2brain/raylib-go#requirements for details.
$ make build
$ ./goxgl models/suzanne.obj
Camera uses WASD + mouse to move around (like in most first-person games). ESC key closes the window. There is also a bunch of keys to toggle different rendering options like wireframe, texturing, backface culling, etc.
- Wireframe rendering
- Backface culling
- Affine texture mapping
- Perspective correct texture mapping
- Flat shading
- Z-buffering
- View frustum clipping
- OBJ file support (with MTL files) - only triangulated
- Parallel tile-based rendering
- Multi-object scenes support
- Scratchapixel
- tinyrenderer by Dmitry V. Sokolov
- Math for Game Developers series by Jorge Rodriguez
- Code-It-Yourself! - 3D Graphics Engine series by javidx9: part 1, part 2, part 3, part 4
- 60005/70090 Computer Graphics lectures by Bernhard Kainz at Imperial College London
- Optimizing Software Occlusion Culling series by Fabian Giesen
- Alias/WaveFront Object (.obj) File Format
- Doom E1M1: Hangar - Map (.obj) by pancakesbassoondonut
- 16x16 pixel textures by PiiiXL