光線追蹤中一個經常使用形式就是長方形的盒子。這個圖元對象常常被用於邊界體積-一個用於加快複雜對象相交測試的算法。算法
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