* kd-tree: - optimize structures - optimize construction: do not use bounding boxes of shapes, instead implement box-shape intersection * transforms, camera * update Python binding, new classes * rename: - Ray.a -> Ray.o or Ray.origin - BBox.R -> H * C++ demos * more complex demosNew Classes?============container.h -- Containerkdtree.h -- KdTreeshapes.h -- Triangle, Spherescene.h -- Ray, Light, Camera, Scenematerial.h -- Material, Texturematrix.h -- Matrixvector.h -- Vector3reader.h -- Reader, WavefrontReaderKdTree topwf = new WavefrontReader()wf.setContainer(top)wf.setTransform(monkey_pos_matrix)wf.read("monkey.obj")// more transform&readsdestroy wftop.optimize() -- i.e. build treeScene scene -- container with shapes, a camera and lightsscene = new Scene()scene.setTop(top) -- top object in hierarchyscene.setCamera(new Camera(pos, dir, angle))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 frommore parameters -- the data (ray origin and direction)