将一个Box看作是三对(六个)平面围成的一个盒子。 对于每对平面， 总有一个面与射线起始点较近， 另

一个较远。 射线与较近平面的距离记为Tnear, 射线与较远平面的距离记为Tfar, 因此有三对Tnear， Tfar。

如果最大的Tnear大于最小的Tfar, 则没有相交；反之相交。

Pseudocode :

set Tnear = – infinity, Tfar = infinity

For each pair of planes P associated with X, Y, and Z do:

(example using X planes)

if direction Xd = 0 then the ray is parallel to the X planes, so

if origin Xo is not between the slabs ( Xo Xh) then return false

else, if the ray is not parallel to the plane then

begin

compute the intersection distance of the planes

T1 = (Xl – Xo) / Xd

T2 = (Xh – Xo) / Xd

If T1 > T2 swap (T1, T2) /* since T1 intersection with near plane */

If T1 > Tnear set Tnear =T1 /* want largest Tnear */

If T2 Tfar box is missed so return false

If Tfar < 0 box is behind ray return false end

### Like this:

Like Loading...

*Related*

## Leave a Reply