1 Bugs  | 
     1 Bugs  | 
     2 ====  | 
     2 ====  | 
     3  * concurrent read? (concurrent write should not occur)  | 
     3  * bad sphere/box transmisivity  | 
         | 
     4    Inside-out transition is ignored as every second intersection is ignored to avoid duplicit  | 
         | 
     5    intersect points. This solution should be replaced by moving ray origin a little forward, which  | 
         | 
     6    should work as well and without side-effects.  | 
     4   | 
     7   | 
     5 Future Plans  | 
     8 Future Plans  | 
     6 ============  | 
     9 ============  | 
         | 
    10  * namespace  | 
     7  * kd-tree:  | 
    11  * kd-tree:  | 
     8    - optimize structures  | 
    12    - optimize structures  | 
     9    - optimize construction: do not use bounding boxes of shapes, instead implement box-shape intersection  | 
    13    - optimize construction: use box-shape intersection instead of bounding boxes of shapes  | 
    10    - optimize traversal -- no std::vector  | 
    14    - optimize traversal -- no std::vector  | 
    11    - save/load  | 
    15    - save/load  | 
    12  * textures (3D procedural, pixmaps later)  | 
    16  * textures (3D procedural, pixmaps)  | 
    13  * update Python binding: Camera, new classes  | 
    17  * update Python binding: Camera, other new classes  | 
    14  * namespace  | 
         | 
    15  * stochastic oversampling  | 
    18  * stochastic oversampling  | 
    16  * absorbtion of refracted rays in dense materials (can be computed using shape distance and some 'absorbance' constant)  | 
    19  * absorbtion of refracted rays in dense materials (can be computed using shape distance and some 'absorbance' constant)  | 
         | 
    20  * implement efficient AABB-ray intersection using Plucker coordinates  | 
         | 
    21  * generalization: Camera "shader" (ray generator), surface shader and maybe light & background shaders  | 
    17   | 
    22   | 
    18 New Classes?  | 
    23 New Classes?  | 
    19 ============  | 
    24 ============  | 
    20   | 
    25   | 
    21 container.h  -- Container  | 
         | 
    22 kdtree.h  -- KdTree  | 
         | 
    23 shapes.h  -- Triangle, Sphere  | 
    26 shapes.h  -- Triangle, Sphere  | 
    24 scene.h   -- Ray, Light, Camera, Scene  | 
    27 scene.h   -- Ray, Light, Camera, Scene  | 
    25 material.h -- Material, Texture  | 
    28 material.h -- Material, Texture  | 
    26 matrix.h  -- Matrix  | 
         | 
    27 vector.h  -- Vector3  | 
         | 
    28 reader.h  -- Reader, WavefrontReader  | 
    29 reader.h  -- Reader, WavefrontReader  | 
    29   | 
    30   | 
    30 KdTree top  | 
         | 
    31 wf = new WavefrontReader()  | 
    31 wf = new WavefrontReader()  | 
    32 wf.setContainer(top)  | 
    32 wf.setContainer(top)  | 
    33 wf.setTransform(monkey_pos_matrix)  | 
    33 wf.setTransform(monkey_pos_matrix)  | 
    34 wf.read("monkey.obj") | 
    34 wf.read("monkey.obj") | 
    35 // more transform&reads  | 
    35 // more transform&reads  | 
    36 destroy wf  | 
    36 destroy wf  | 
    37   | 
    37   | 
    38 top.optimize()  -- i.e. build tree  | 
         | 
    39   | 
         | 
    40 Scene scene -- container with shapes, a camera and lights  | 
    38 Scene scene -- container with shapes, a camera and lights  | 
    41 scene = new Scene()  | 
    39 scene = new Scene()  | 
    42 scene.setTop(top) -- top object in hierarchy  | 
         | 
    43 scene.setCamera(new Camera(eye, u, v, p))  | 
    40 scene.setCamera(new Camera(eye, u, v, p))  | 
    44 scene.addLight(new PointLight(pos, color))  | 
    41 scene.addLight(new PointLight(pos, color))  | 
    45 rt.setScene(scene)  | 
    42 rt.setScene(scene)  | 
    46 rt.render(w,h)  | 
    43 rt.render(w,h)  | 
    47   | 
    44   |