The screenshots are reduced from 800x600 in engine captures (to 640x480 for a smaller download.)
To give you a time frame of when I created this and what the state of 3D games were at the time, these screenshots are from about the time shortly after Quake 2 came out, from right before I abandoned this project. They were rendered on a Pentium 200 MHz with a 3DFX Voodoo2 card, and for these scenes the game ran at about 60 fps. (Which is a pretty easy frame rate to achieve, considering they contain a fairly low number of polygons, and since you could only walk around, not much other code was running.) I think the engine could produce decent looking graphics for the time. What you'll learn when starting to program a 3D engine though is that there are a million other things to do, like collision detection, path-finding, level editor creation, extra 3D effects, management of large amounts of data, and getting many other small aspects running and bug-free. I didn't get very far on this second part. (The collision detection was buggy, and the level editor was slapped together and tough to use.) My excuse for stopping work was going to college.
The lighting was calculated per light using shadow volumes and stored as lightmaps. (16-bit RGB textures that are multiplied with the texture on the object. You probably notice the color banding in these screenshots. Part of this is that the shots are jpeg compressed, but it is mainly because the 16-bits light textures don't hold enough information for smooth gradual color transitions. 16-bit was all the Voodoo2 supported ) To give the illusion of reflected light, shadows decereased the light to 1/4th brightness, instead of blocking it completely.
The Levels were Portal-Based. I had the portals working, except there were a couple bugs, and there was slowdown with too many portals visible at once. The portals basically allowed for small chunks of levels (which I called portals, but I also called the planes between them portals) to be stuck together. This made rendering and collision detection quicker, because I could deal with small parts of the level at a time, and ignore portals that weren't visible.
I programmed this in C, using GLIDE for the graphics. GLIDE was a Voodoo specific API, and the version I programmed for and other decisions rendered the engine unusable on anything other than an 8 MB voodoo 2. This is why nowadays I use OpenGL to manage graphics, and test on many different computers while programming.
(Yes, I realize the brick texture on this one looks too flat. If the 3D engine ran on my computer, I might try to make some better looking levels & screenshots.)
Page by: jkreuzer.