射线与球体相交:射线追踪的核心实现
1. 射线追踪之旅开启
在完成了基础工作后,我们终于要开始构建真正的射线追踪器了。从现在起,每一步都会有具体且可视化的成果,为我们的视觉盛宴添砖加瓦。在本章中,我们的第一个可视化成果只是一个简单的填充圆,但它背后运用了射线追踪器最基础的操作:射线投射。
射线投射就是创建一条射线(或直线),并找出这条射线与场景中物体的交点。接下来,我们将详细探讨这个过程。
2. 创建射线
射线追踪器创建的每条射线都有一个起始点(称为原点)和一个指示方向的向量。我们可以通过以下测试来验证射线的创建和其主要属性:
Scenario: Creating and querying a ray
Given origin ←point(1, 2, 3)
And direction ←vector(4, 5, 6)
When r ←ray(origin, direction)
Then r.origin = origin
And r.direction = direction
通过射线的原点和方向,我们可以找到射线上任意距离 t 处的点。 t 在这里代表时间,当把射线的方向向量看作速度时,就很好理解了。例如,如果射线每秒移动一个单位,那么在 3.5 秒后,射线移动的距离就可以通过计算得出。
下面的测试引入了一个新函数 position(ray, t) ,用于计算射线上距离为 t 的点:
超级会员免费看
订阅专栏 解锁全文
1万+

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



