My first 3D Engine
It started like a generic 3D engine with most features for those years: ASE loader, particle systems, quaternion rotations, fog, dynamic lights, octrees...












Quake 3 features
But after a while I got interested on the Quake 3 file format and I started to recreate some of the features it has like lightmaps, curved surfaces, player models, shaders ...













