Realtime software 3D renderer
A purely software (no OpenGL or DirectX) realtime 3D renderer, that I built to learn some math and magic behind 3D graphics. It uses raylib for window management and framebuffer access, but all the rendering is done from scratch in Go without relying on third-party libraries.
While the project is fairly simple overall, it includes some nifty optimizations, such as parallel tiled rendering, optimal use of CPU caches, and leveraging SIMD operations on AMD64 via some assembly code. On my laptop (MBP Intel machine), it can deliver about 10 million untextured triangles per second at 1280×720 resolution. This results in frame rate of 95-105 FPS for a single object scene composed of 200k triangles.
https://github.com/maxpoletaev/gorender/assets/1812128/985253cc-a0fc-4972-88c9-ef51d6f03af0
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
For no-assembly version:
make build_noasm
$ ./gorender 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.