1.3.10.9 Calculating the image
#debug "Rendering...\n\n"
#declare Image = array[ImageWidth][ImageHeight]
#declare IndY = 0;
#while(IndY < ImageHeight)
#declare CoordY = IndY/(ImageHeight-1)*2-1;
#declare IndX = 0;
#while(IndX < ImageWidth)
#declare CoordX =
(IndX/(ImageWidth-1)-.5)*2*ImageWidth/ImageHeight;
#declare Image[IndX][IndY] =
Trace(-z*3, <CoordX, CoordY, 3>, 1);
#declare IndX = IndX+1;
#end
#declare IndY = IndY+1;
#debug concat("\rDone ", str(100*IndY/ImageHeight,0,1),
"% (line ", str(IndY,0,0)," out of ",str(ImageHeight,0,0),")")
#end
#debug "\n"
Now we just have to calculate the image into an array of colors. This array is defined at the beginning of the code
above; it is a two-dimensional array representing the final image we are calculating.
Note how we use the #debug stream to output useful information about the rendering process while we
are calculating. This is nice because the rendering process is quite slow and it is good to give the user some
feedback about what is happening and how long it will take. (Also note that the "% " character
in the string of the second #debug command will work ok only in the Windows version of POV-Ray; for other
versions it may be necessary to convert it to "%% ".)
What we do here is to go through each "pixel" of the "image" (ie. the array) and for each one
calculate the camera location (fixed to -z*3 here) and the direction of the ray that goes through the
pixel (in this code the "viewing plane" is fixed and located in the x-y-plane and its height is fixed to 1).
What the following line:
#declare CoordY = IndY/(ImageHeight-1)*2-1;
does is to scale the IndY so that it goes from -1 to 1. It is first divided by the maximum value it
gets (which is ImageHeight-1 ) and then it is multiplied by 2 and substracted by 1. This results in a
value which goes from -1 to 1.
The CoordX is calculated similarly, but it is also multiplied by the aspect ratio of the image we are
calculating (so that we do not get a squeezed image).
|