(5)如果最近物体指针指向的既不是 NULL 也不是光源,则从交点向光源发
出一条光线,并判断该光线在射向光源的过程中是否被遮挡,如果被遮挡,则
该交点对光源不可见;
(6)若第五步中的光线在射向光源的过程中没有被遮挡,则该交点对光源可
见。那么从交点到光源做出一条入射光线,并将入射光线单位化。求出物体表
面该交点处的法向量之后,我们就可以利用公式计算出该点的散射光强值、镜
面反射光强值,并将它们加到总光强值上;
(7)对于反射光线,我们先利用视线和交点处的法向向量求出视线的反射光
线,并将其单位化。然后以交点为视点,以交点处的反射光线为视线递归地进
行跟踪,直至达到最大递归深度,我们就得到了加上递归反射光强的总光强值;
(8)最后,我们逐行逐个像素的将三种颜色值输出到屏幕上。至此,通过光
线跟踪就得到了一幅质量很高的图像。
2.Ray Tracing 算法的具体实现
2.1 实现算法的 C++程序简介
该程序由 C++编写而成,主要分为以下几个部分:
(1) 点和向量的定义及运算;
(2) 光线类的定义及操作;
(3) 场景中各种物体的材质特征定义和求交计算;
(4) 光线跟踪过程及图像绘制;
2.2 算法的具体实现过程
(1)点和向量的定义及运算
2