Please note that this code was written before I'd learnt about the STL, so therefore I've re-implemented a linked list structure. There's also some skeleton code for more object and light types than the tracer currently supports but the existing types (planes and spheres, point and direction lights) should give a good enough idea of what is going on to show that the principle works.
Currently, shadows, textures, lighting, objects and colouring works. There is, as yet, no support for reflection or refraction (or indeed anything that requires recursive tracing) or bump-mapping (though this would be trivial to work in).
The tracer, by default, produces a TGA file in the directory it's executing in. There are two projects in the workspace provided - Debug and Debug simple. These are exactly the same functionally, they just trace different scenes. Debug uses core.cpp and Debug simple uses simple.cpp. I hope it's obvious what each one is rendering from the source code.
There are known issues with not all the vector and point objects being deleted after use, and there are a few interesting rounding errors leading to some jitter within the scene. Other than that, it seems to work quite well.
Click here to download a zip file containing a Visual C++ 6.0 project of the tracer.
It uses locks on the drawing surface to enable pixel-by-pixel access to the surface.
It might need to be run in 16bit mode, I can't remember. The Visual C++ 6.0 project are provided in the the zip, which can be downloaded here
I was largely responsible for the network code in the project.
It requires OpenGL and GNU Maverik to compile and run. This will probably need a Linux box, but an IRIX one might work.
You can get the source code here and the project report as a gz compressed postscript file here.
(please note the mavdoom links are currently broken. I am aware of this and am working on it)