Code

Project Highlights
- Object-oriented programming and class abstraction used effectively
- Factory and Singleton design patterns
- Supports meshes, soft shadows, diffuse reflection, textures, et al.
Banky, a ray tracer named after a character in a Kevin Smith movie, is one of my greatest programming achievements, not just because of what it can do, but more on account of how it does it. This program is special because it is my finest example of elgant, organized code, truely earning the title Object-Oriented program. Created using the abstract factory design pattern, Banky is easily mutable and ready for new additions to be dropped in at any time.
Sample Render
This large render showcases several of Banky's bells and whistles, including reflection falloff, and was rendered as 10 seperate images. The complete render traced a total of 761,485,658 rays! The full render is 2550 x 2550 with 8 samples per pixel (the file was large enough to be printed at 300dpi) and because almost no optimization has been added (it was not in the scope of the class) it took about 5 hours to complete.
Check out the full size version. Warning: The file is friggen HUGE: 11 megs.
UML Diagram
This UML diagram shows the relationship between the Scene, Tracer and Renderer. New objects in each of the three main data structures, IGeometry, ISurface and ILight, are created with factories, following the Abstract Factory Design Pattern.
Note that the ISurface and ILight classes are not diagramed but that they work in the same way as the IGeometry interface class.