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