Design Specification This is the design specification of Pane, a globally illumination raytracer. Pane will be written in C++ using the object-oriented paradigm. It will also use Open Inventor, which uses Open GL. I intend to use STL for data structures and Henrik Jensen's photon map class. Flow of data Scene file (.iv file) + command line options (using getopt) -> pane pane reads scene into internal format (using an octree for fast ray-triangle intersection) pane does any lighting (using photon map) pane outputs the scene to an iv file (using OIV), or an image (using internal algorithm) Code Reuse Policy I will reuse as much code as I want. This is necessary to meet the quick pace of the project. I am confident that enough code will be mine to satisfy authorship of the program. Of course, reused code will be cited. To be clear, Josh Grant has already written a program similar to pane and implemented many of the parts necessary already, and has made his source available. I intend to use his source as a reference and for key parts, such as OIV callbacks for triangle acquisition. Phase 1 "By the first day the user should be able to read in a scene file and create an unlit image of the scene." I will use OIV to read in a scene file, and register a callback to store the triangles into an internal data structure. This data structure will just be a class with a linear list of triangles (and properties). Next I will hard code a camera and raytrace the scene. For each pixel I will do ray-triangle intersection with the scene and if there is a collision, use the angle of incidence as the shading factor. If I am ambitious I will also include the color. Then I will use this as the color of the pixel. After I find a color for each pixel, I will write out the image using the PPM format. The justification for using incident angle as the shading factor is that ??????? figure out later. Pane will be used in the following fashion: pane -i scene.iv -o image.ppm Phase 2 I will replace the linear data structure with an octree and use recursive raytracing, with shadow tests (see if light sources - emissive triangles - are around). Phase 3 I will shoot photons from the light into the scene and store them in a photon map. Then I will balance the photon map and use it for ray-tracing using the algorithm in Jensen's book. Phase 4 I will use the photon map generated lighting information to modify colors in the scene, and write the new scene out to an iv file. Also I will figure out how to have an intelligent and configurable camera. Further Phases Transparency? Image output format options (jpeg?). Lens distortion? Texture mapping?