ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/o_face.c
(Generate patch)

Comparing ray/src/rt/o_face.c (file contents):
Revision 1.1 by greg, Thu Feb 2 10:41:32 1989 UTC vs.
Revision 2.6 by greg, Thu Mar 2 16:51:55 2006 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1986 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char RCSid[] = "$Id$";
3   #endif
6
4   /*
5   *  o_face.c - compute ray intersection with faces.
9 *
10 *     8/29/85
6   */
7  
8 < #include  "ray.h"
8 > #include "copyright.h"
9  
10 + #include  "ray.h"
11   #include  "face.h"
12 + #include  "rtotypes.h"
13  
14  
15 < o_face(o, r)            /* compute intersection with polygonal face */
16 < OBJREC  *o;
17 < register RAY  *r;
15 > extern int
16 > o_face(         /* compute intersection with polygonal face */
17 >        OBJREC  *o,
18 >        register RAY  *r
19 > )
20   {
21          double  rdot;           /* direction . normal */
22          double  t;              /* distance to intersection */
23          FVECT  pisect;          /* intersection point */
24          register FACE  *f;      /* face record */
26        register int  i;
25  
26          f = getface(o);
27                  
# Line 41 | Line 39 | register RAY  *r;
39          if (rdot <= FTINY && rdot >= -FTINY)    /* ray parallels plane */
40                  t = FHUGE;
41          else
42 <                t = (DOT(r->rorg, f->norm) - f->const) / rdot;
42 >                t = (DOT(r->rorg, f->norm) - f->offset) / rdot;
43          
44          if (t <= FTINY || t >= r->rot)          /* not good enough */
45                  return(0);
46                                                  /* compute intersection */
47 <        for (i = 0; i < 3; i++)
50 <                pisect[i] = r->rorg[i] + r->rdir[i]*t;
47 >        VSUM(pisect, r->rorg, r->rdir, t);
48  
49 <        if (inface(pisect, f)) {                /* ray intersects face? */
49 >        if (!inface(pisect, f))                 /* ray intersects face? */
50 >                return(0);
51  
52 <                r->ro = o;
53 <                r->rot = t;
54 <                VCOPY(r->rop, pisect);
55 <                VCOPY(r->ron, f->norm);
56 <                r->rod = rdot;
57 <        }
52 >        r->ro = o;
53 >        r->rot = t;
54 >        VCOPY(r->rop, pisect);
55 >        VCOPY(r->ron, f->norm);
56 >        r->rod = rdot;
57 >        r->pert[0] = r->pert[1] = r->pert[2] = 0.0;
58 >        r->uv[0] = r->uv[1] = 0.0;
59 >        r->rox = NULL;
60 >
61          return(1);                              /* hit */
62   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines