Sigaev.com / programs / b1998
3D snooker simulator with ray-traced interface Updated 17 May 2008

Technology

I started this project in October 1998, and was done by February next year. It took about 4,000 lines of C++ and 1,000 lines of i386 assembly, not counting the ray tracer (also coded from scratch). I haven't used any libraries—not even the STL or standard C library—and drew the textures in MS Paint :-)

Yet, the graphics ran fast enough on a 386 DX without any hardware acceleration.

To me, it was simple proof-of-concept software combining two elegant 3D computer graphics techniques—ray tracing and real-time rendering. On the other hand, I've seen M.S. in computer science awarded for a fraction of the effort—yet I was only a second-year college student in about the most intense physics program in the world.

Screenshots

Full 3D view of the initial setup of 16 textured balls and a symbolic arrow pointing at the currently selected ball. All interface elements are ray-traced and casting shadows. When buttons are pressed, their shadows change accordingly.

Split view (3D on the left, 2D on the right) and an exit warning. A closer look shows that the balls are not polygonized—they are true textured spheres.

More detailed view of a handful of balls:

Last but not least, the help screen. Notice a bunch of elliptic paraboloids in the background. They are reflecting a gradient grid on a horizontal plane. They are also casting shadows. Please don't pay attention to the language. No, I didn't know any English back in 1998.