new virtual Shape::intersect_bbox
implementation of triangle-AABB intersection
octree building updated and simplified with help of this new method
octree made default for Python, it's currently much faster than kd-tree (both building and traversal)
Bugs
====
* concurrent read? (concurrent write should not occur)
Future Plans
============
* kd-tree:
- optimize structures
- optimize construction: do not use bounding boxes of shapes, instead implement box-shape intersection
- save/load
* uniform grid, octree
* textures (3D procedural, pixmaps later)
* update Python binding: Camera, new classes
* namespace
* stochastic oversampling
* absorbtion of refracted rays in dense materials (can be computed using shape distance and some 'absorbance' constant)
New Classes?
============
container.h -- Container
kdtree.h -- KdTree
shapes.h -- Triangle, Sphere
scene.h -- Ray, Light, Camera, Scene
material.h -- Material, Texture
matrix.h -- Matrix
vector.h -- Vector3
reader.h -- Reader, WavefrontReader
KdTree top
wf = new WavefrontReader()
wf.setContainer(top)
wf.setTransform(monkey_pos_matrix)
wf.read("monkey.obj")
// more transform&reads
destroy wf
top.optimize() -- i.e. build tree
Scene scene -- container with shapes, a camera and lights
scene = new Scene()
scene.setTop(top) -- top object in hierarchy
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)