TODO
author Radek Brich <radek.brich@devl.cz>
Fri, 28 Mar 2008 17:13:21 +0100
branchpyrit
changeset 50 14a727b70d07
parent 49 558fde7da82a
child 57 1e92c21b9a61
permissions -rw-r--r--
rewritten threads with heavy debug information disabling pthreads library will not be possible any more

Bugs
====
 * bad sphere/box transmisivity
   Inside-out transition is ignored as every second intersection is ignored to avoid duplicit
   intersect points. This solution should be replaced by moving ray origin a little forward, which
   should work as well and without side-effects.

Future Plans
============
 * changing main ray tracing algoritm to more flexible architecture with a Sampler object:
  - enhance Sampler to support subsampling
  - rewrite pthreads
 * namespace
 * kd-tree:
   - optimize structures
   - optimize construction: use box-shape intersection instead of bounding boxes of shapes
   - optimize traversal -- no std::vector
   - save/load
 * textures (3D procedural, pixmaps)
 * update Python binding: Camera, other new classes
 * stochastic oversampling
 * absorbtion of refracted rays in dense materials (can be computed using shape distance and some 'absorbance' constant)
 * implement efficient AABB-ray intersection using Plucker coordinates
 * generalization: Camera "shader" (ray generator), surface shader and maybe light & background shaders

Performance Weak Points
=======================
 * Raytracer::render -- allocating and deallocating every sample


New Classes?
============

shapes.h  -- Triangle, Sphere
scene.h   -- Ray, Light, Camera, Scene
material.h -- Material, Texture
reader.h  -- Reader, WavefrontReader

wf = new WavefrontReader()
wf.setContainer(top)
wf.setTransform(monkey_pos_matrix)
wf.read("monkey.obj")
// more transform&reads
destroy wf

Scene scene -- container with shapes, a camera and lights
scene = new Scene()
scene.setCamera(new Camera(eye, u, v, p))
scene.addLight(new PointLight(pos, color))
rt.setScene(scene)
rt.render(w,h)


constructors have zero or one parameter by default -- the object to copy data from
more parameters -- the data (ray origin and direction)