该伪代码总结了光线追踪算法。
Function Raytrace(Scene World)
{
for(each pixel of the image)
{
Calculate the ray corresponding to the pixel
(projection);
Pixel color=trace(ray,0);
}
}
color trace(Ray myRay,interger recurs_level)
{
if(myRay intersects an object Obj)
{
Calculate normal N at point of intersection Pi;
Calculate surface color SC at point of intersection Pi;
Final_Color=Shade(Obj,myRay,N,SC,Pi,recurs_level);
}
else
{
Calculate background color BkgC;
Final_Color=BkgC;
}
return Final_Color;
}
color Shade(Object obj,Ray myRay,Normal N,Surface_Color SC,
Point Pi,integer recurslevel)
{
recurslevel++;
if(recurslevel>MAX_RECURSION_LEVEL)
return 0;
for(each light source)
{
Calculate light ray(Pi points to light source);
if(light ray doesn't intersect an object)
{
add light contribution to color based
on the angle between light ray and myRay;
}
}
calculate reflect ray;
refl_color=trace(refl_ray,recurslevel);
calculate refract ray;
refr_color=trace(refr_ray,recurslevel);
return average(color,refl_color,refr_color);
}