[Raytracing]代码框架

该伪代码总结了光线追踪算法。


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);
}
posted @ 2012-05-27 23:13  Cavia  阅读(2023)  评论(0编辑  收藏  举报