关于光线追踪算法的一些问题:
它获得与光线相交的第一个对象
(如果没有交叉点,则熄灭)
然后如果对象是反射的,它会递归地发送反射光并计算它的颜色。
如果对象是透明的,它会递归地发送折射光线并计算它的颜色。
最后一行是什么?:
return shade(reflactColor, refractColor,p,obj)
是否通过对reflectColor和refractColor的值进行平均值来计算颜色?
2 。阴影射线在哪里?它不是算法的一部分
3 。最后一件事......为什么我们需要让它递归?
答案 0 :(得分:0)
您似乎对算法有很好的把握。
最后一行确实看起来像计算反射和折射颜色的某种加权组合。
另外,您在帖子中附加的基本算法中不包含阴影光线跟踪,这是正确的。但是,可以通过向光源拍摄光线并确定击中的物体与光线之间是否存在交叉点来轻松添加。如果有,则遮挡光线,此时不应点亮物体。
为了解释递归,人们可以想到一对镜子彼此相对。你将获得无限的镜面效果(在现实生活中)。如果你没有递归并只投射一次反射/折射光线,那么你的虚拟镜子(或一般的反射面)只会反射其他物体,而不会反映其他物体的反射。 (所以,没有无限的镜面效果。:()