Description
Persistence of Vision (POV) is a programming language that does Ray Tracing. You create objects and the program calculates how light interacts with those objects and creates an image.
Assessment/Opinion/Experience
I have been using this program since the early 1990's. It is widely used and has an active community. While the core product uses text to program, there are visual modeling tools that will generate code.
Most of the literature is out of print, but is available through Used Book stores.
Recommendation
There is no cost to this program and it is worth the investment of your time to learn.
Computers Supported
Macintosh*
Windows
Linux
* Note: There is a bug that causes POV not to work with Intel based Manintosh's. The workaround is to use Mega-POV as the code editor.
Books
Ray Tracing Creations - Second Edition by Chris Young and Drew Wells - © 1994 - 571 pages.
Even though this book is dated, it is a good overview. Used copies can be found for a reasonable price. The online documentation for POV is about 450 pages and would be expensive to print.
Rating: ★★★★—
Ray Tracing Worlds with POV-RAY by Alexander Enzmann, Lutz Kretzschmar and Chris Young - © 1994 - 430 pages.
Discussion of a visual modeling tool called MORAY which is now available for no cost.
Rating: ★★★★—
Reference/Links
Official POV-Ray Website
Mega-POV Website
Sample Code for the "Rhythm" Picture
//Persistence of Vision Ray Tracer Scene Description File // Rhythm // 1-2-1-3-1 // November 9, 2009 // Michael D. Gillie
#include "colors.inc" #include "textures.inc"
//--- Create Shapes
#declare WhiteMountBoard = plane { <0, 0,1>,40 texture { pigment { White} finish{Luminous} } } // --- End WhiteMountBoard
#declare Shape1= merge{ box { <0,0,0>, <20,120,0> } box { <0,120,0>, <40,380,0> } box { <0,380,0>, <20,500,0> } pigment {Black} } // --- End Shape 1
#declare Shape2= merge{ box { <0,0,0>, <40,110,0> } box { <15,110,0>, <10,390,0> } triangle{ <10,220,0>,<10,280,0>,<50,250,0> } box { <0,390,0>, <40,500,0> } pigment {Black} } // --- End Shape 2
//------ End Create Shapes
//Mainline //Lights, Camera light_source { <20,300, --20> color White }
camera { location <200, 250, -500> look_at <200, 250,100> } // --- End Lights Camera
//Action - Render Scene WhiteMountBoard Shape1 object {Shape2 translate x*50} object {Shape2 translate x*100} object {Shape1 translate x*150} object {Shape2 translate x*200} object {Shape2 translate x*250} object {Shape2 translate x*300} object {Shape1 translate x*350} //--- End Action - Render Scene