For a class project I had to build a ray tracer from scratch, but we were allowed to use any program we wanted to display and manage things like color etc. So I use sfml to display and save the images, as well as sf::Color. I obviously had to make my own Vector and Geometry classes though.
It (can) use an Octree to speed up the ray tracing, but it only starts to pay off above a few hundred objects in the scene.
Features:
Octree
Soft and Hard Shadows
Antialiasing
Multijittering
Directional, Point, and Area Lights
Potentially Unlimited reflection recursion.
Any object can have varying levels of Reflection, Diffuse Shading, Specular Reflection, Object Color
Mesh Loading
Spheres
Triangles
Parallelograms
Infinite Planes
Camera (moves, pitches, yaws, rolls)
The camera actually moves all the objects in the scene by the inverse transformation.
I'll post the code when the class ends (to prevent other students from finding my code and potentially copying and getting me in trouble). In the mean time, here are some of the best images.
Click to enlarge:1000x1000; 4 sample Multi-jitter; Unlimited reflective recursion; Area light with 36 samples (6x6); Various Diffuse,Specular,Reflective values for the spheres and planar floor. Took 4 minutes to render.
1601 Spheres.
A purple cow.
Purple Teapot.