光线追踪中一个经常使用形式就是长方形的盒子。这个图元对象常常被用于边界体积-一个用于加快复杂对象相交测试的算法。算法
Kay和Kajiya提出了一个基于slabs[9]来处理这些相交对象的方法。slab就是两个平行平面之间的空间。slab集的相交定义了边界体积。该方法依赖于每一对板的光线的交点,跟踪近距离和远距离的交点距离。若是最大的近值大于最小的远值,那么射线会错过边界体积。不然,会击中。测试
最简单的有限边界体积之一是两个平行平面的交点,每一个平面对齐,使得它们的法线与X,Y和Z轴的方向相同。 这个配置有不少属性,这使得它能够有效地测试交集。 如下算法使用这些属性来容许快速测试边界盒。 它被写入以便返回一个布尔值:若是该盒已经被命中则为TRUE,不然返回FALSE。spa
用两个坐标定义正交盒:对象
根据其原点和方向矢量定义光线:blog
其中t > 0。 咱们并不要求这些计算的射线方向被标准化,尽管若是须要相交距离,这种标准化是可取的。配置
算法以下,若是击中盒,返回TRUE:循环
依次判断X,Y,Z坐标,这里写的是X坐标的状况方法
若是盒子被击中,相交距离等于tnear,射线的出口点是tfar。 能够按照公式(C8)中'射线/平面相交'部分公式计算交点。 图11显示了相交测试的两种状况。 对于更高效的算法,展开循环,将t1和t2交换为两个分支,而后将计算更改成乘以光线方向的倒数以免分割。 展开回路容许消除比较t1和t2与X平面的tnear和tfar,由于tnear将始终设置为较小值,tfar则为t1和t1中较大的值。im