IntersectRayTri(o,d,p0,p1,p2)
returns ({REJECT, INTERSECT},u,v,t);
1: e1=p1-p0
2: e2=p2-p0
3: r=d × e2
4: a=e1
r
5: s=o-p0
6: f=1/a
7: q=s × e1
8: if (a>
)
9: {
10: u=s
r
11: if (u<0.0 or u>a) return (REJECT,0,0,0);
12: v= d
q
13: if (v<0.0 or u+v>a) return (REJECT,0,0,0);
14: }
15: else if (a < -
)
16: {
17: u= s
r
18: if (u>0.0 or u<a) return (REJECT,0,0,0);
19: v= d
q
20: if (v>0.0 or u+v<a) return (REJECT,0,0,0);
21: }
22: else return (REJECT,0,0,0);
23: t= *(e2
q)
24: u=u * ;
25: v=v * ;
26: return (INTERSECT,u,v,t);
Example 5: Checking front- and back-facing triangles.
Back to Article