Game Development Reference
In-Depth Information
i n s i d e
=
f a l s e ;
zn
=
1.0 f ;
}
e l s e
i f
( r a y O r g . z > max . z )
{
z t
=
max . z
r a y O r g . z ;
i f
( z t < r a y D e l t a . z )
r e t u r n
k N o I n t e r s e c t i o n ;
z t
/ =
r a y D e l t a . z ;
i n s i d e
=
f a l s e ;
zn
=
1 . 0 f ;
}
e l s e
{
z t
=
1.0 f ;
}
/ /
Ray
o r i g i n
i n s i d e
box ?
i f
( i n s i d e )
{
( r e t u r n N o r m a l ! = NULL ) {
r e t u r n N o r m a l = r a y D e l t a ;
r e t u r n N o r m a l −> n o r m a l i z e ( ) ;
i f
}
r e t u r n
0 . 0 f ;
}
/ /
S e l e c t
f a r t h e s t
p l a n e
t h i s
i s
/ /
t h e
p l a n e
o f
i n t e r s e c t i o n .
i n t
which
=
0 ;
f l o a t
t
=
x t ;
i f
( y t > t )
{
which
=
1 ;
t
=
y t ;
}
i f
( z t > t )
{
which
=
2 ;
t
=
z t ;
}
s w i t c h
( which )
{
c a s e
0 :
/ /
i n t e r s e c t
w i t h
yz
p l a n e
{
f l o a t
y
=
r a y O r g . y
+
r a y D e l t a . y t ;
i f
( y < min . y
| |
y > max . y )
r e t u r n
k N o I n t e r s e c t i o n ;
f l o a t
z
=
r a y O r g . z
+
r a y D e l t a . z t ;
i f
( z < min . z
| |
z > max . z )
r e t u r n
k N o I n t e r s e c t i o n ;
i f
( r e t u r n N o r m a l
! =
NULL )
{
r e t u r n N o r m a l −> x
=
xn ;
r e t u r n N o r m a l −> y
=
0 . 0 f ;
r e t u r n N o r m a l −> z
=
0 . 0 f ;
}
}
br ea k ;
c a s e
1 :
/ /
i n t e r s e c t
w i t h
xz
p l a n e
{
f l o a t
x
=
r a y O r g . x
+
r a y D e l t a . x t ;
i f
( x < min . x
| |
x > max . x )
r e t u r n
k N o I n t e r s e c t i o n ;
f l o a t
z
=
r a y O r g . z
+
r a y D e l t a . z t ;
i f
( z < min . z
| |
z > max . z )
r e t u r n
k N o I n t e r s e c t i o n ;
i f
( r e t u r n N o r m a l
! =
NULL )
{
r e t u r n N o r m a l −> x
=
0 . 0 f ;
r e t u r n N o r m a l −> y
=
yn ;
r e t u r n N o r m a l −> z
=
0 . 0 f ;
}
}
br ea k ;
Search WWH ::




Custom Search