7、光线追踪:从球体轮廓到光照着色

光线追踪:从球体轮廓到光照着色

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 <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值