光线追踪:从球体轮廓到光照着色
1. 光线与平移球体相交测试
在光线追踪的过程中,我们会遇到光线与平移后的球体相交的情况。例如给定一条光线 r ,其起点为 point(0, 0, -5) ,方向为 vector(0, 0, 1) ,还有一个球体 s 。当我们对球体进行平移变换,将其沿 x 轴移动 5 个单位时,再计算光线与球体的交点,会发现交点数量为 0。
为了让相关测试通过,需要确保传递给 intersect 函数的光线经过球体变换矩阵的逆变换。以下是修改后的伪代码:
function intersect(sphere, ray)
ray2 ← transform(ray, inverse(sphere.transform))
# ...
end function
在函数的其他计算中,也要使用新的光线 ray2 。通过这种方式,我们可以保持使用可爱的单位球体,同时还能以各种方式对其进行变形,比如通过非均匀缩放将其变成椭球体,使用剪切变换使其倾斜,以及在场景中随意平移。
2. 绘制球体轮廓
现在我们要编写一个程序,向球体发射光线并将图像绘制到画布上。任何击中球体的光线对应的像素将被着色(例如红色),未击中的则绘制成黑色,最终得到球体的轮廓。以下是一些实现提示:
- Hint #1 <
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



