下面,我们给出光线跟踪的递归算法:
RayTracer(Ray, Depth, &Color)
{
�if (光线亮度衰减到小于给定值) return;
�计算Ray与场景中最近的物体的交点P;
�if (没有交点) Color = Background; //颜色等于背景色
�else
�{
��阴影测试;
��//在P点的颜色=P点的局部光强
��Color = Local contribution at P by Hall model or somewhat else;
��if (Depth>1)
��{
���if (当前面是镜面)
���{
����计算反射光线ReflectedRay;
����RayTracer(ReflectedRay, Depth-1, &RefColor);
����Color= Color + RefColor ;
����}
����if (当前面是透射面)
����{
�����计算透射光线TransmittedRay;
�����RayTracer(TransmittedRay, Depth-1, &TransColor);
�����Color= Color + TransColor;
����}
���}
�}
}
|