|
#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's 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's 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's first divided by the maximum value it gets (which is
ImageHeight-1
) and then it's 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's also multiplied
by the aspect ratio of the image we are calculating (so that we don't get
a squeezed image).
|