光线追踪中的立方体与圆柱体渲染
1. 立方体的光线相交与法线计算
在光线追踪中,判断光线是否与立方体相交是一个重要的步骤。当我们发现最小的 t 值比最大的 t 值离光线原点更远时,这显然是不合理的,这就表明光线没有与立方体相交。以下是优化后的光线与立方体相交的伪代码:
function local_intersect(cube, ray)
xtmin, xtmax ← check_axis(ray.origin.x, ray.direction.x)
ytmin, ytmax ← check_axis(ray.origin.y, ray.direction.y)
ztmin, ztmax ← check_axis(ray.origin.z, ray.direction.z)
tmin ← max(xtmin, ytmin, ztmin)
tmax ← min(xtmax, ytmax, ztmax)
return () if tmin > tmax
return ( intersection(tmin, cube), intersection(tmax, cube) )
end function
当上述测试通过后,接下来需要计算立方体表面的法线向量。法线向量是垂直于表面向外的向量,光线追踪器利用它来计算各种效果,如阴影、反射和折射。对于立方体,每个面都是一个平面,其法线在该面上的每个点都是相同的。以下测试展示了如何计算立方体不同点的法线:
超级会员免费看
订阅专栏 解锁全文
1375

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



