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

Comparing ray/src/rt/virtuals.c (file contents):
Revision 2.13 by greg, Tue Mar 2 01:13:45 2004 UTC vs.
Revision 2.17 by greg, Thu Sep 7 05:20:54 2006 UTC

# Line 26 | Line 26 | static OBJECT  *vobject;               /* virtual source objects */
26   static int  nvobjects = 0;              /* number of virtual source objects */
27  
28  
29 < void
30 < markvirtuals()                  /* find and mark virtual sources */
29 > extern void
30 > markvirtuals(void)                      /* find and mark virtual sources */
31   {
32          register OBJREC  *o;
33          register int  i;
# Line 69 | Line 69 | markvirtuals()                 /* find and mark virtual sources */
69   }
70  
71  
72 < void
73 < addvirtuals(sn, nr)             /* add virtuals associated with source */
74 < int  sn;
75 < int  nr;
72 > extern void
73 > addvirtuals(            /* add virtuals associated with source */
74 >        int  sn,
75 >        int  nr
76 > )
77   {
78          register int  i;
79                                  /* check relay limit first */
# Line 87 | Line 88 | int  nr;
88   }
89  
90  
91 < void
92 < vproject(o, sn, n)              /* create projected source(s) if they exist */
93 < OBJREC  *o;
94 < int  sn;
95 < int  n;
91 > extern void
92 > vproject(               /* create projected source(s) if they exist */
93 >        OBJREC  *o,
94 >        int  sn,
95 >        int  n
96 > )
97   {
98          register int  i;
99          register VSMATERIAL  *vsmat;
# Line 115 | Line 117 | int  n;
117   }
118  
119  
120 < OBJREC *
121 < vsmaterial(o)                   /* get virtual source material pointer */
122 < OBJREC  *o;
120 > extern OBJREC *
121 > vsmaterial(                     /* get virtual source material pointer */
122 >        OBJREC  *o
123 > )
124   {
125          register int  i;
126          register OBJREC  *m;
# Line 134 | Line 137 | OBJREC  *o;
137   }
138  
139  
140 < int
141 < makevsrc(op, sn, pm)            /* make virtual source if reasonable */
142 < OBJREC  *op;
143 < register int  sn;
144 < MAT4  pm;
140 > extern int
141 > makevsrc(               /* make virtual source if reasonable */
142 >        OBJREC  *op,
143 >        register int  sn,
144 >        MAT4  pm
145 > )
146   {
147          FVECT  nsloc, nsnorm, ocent, v;
148          double  maxrad2, d;
# Line 255 | Line 259 | MAT4  pm;
259          return(i);
260   memerr:
261          error(SYSTEM, "out of memory in makevsrc");
262 +        return -1; /* pro forma return */
263   }
264  
265  
266 < double
267 < getdisk(oc, op, sn)             /* get visible object disk */
268 < FVECT  oc;
269 < OBJREC  *op;
270 < register int  sn;
266 > extern double
267 > getdisk(                /* get visible object disk */
268 >        FVECT  oc,
269 >        OBJREC  *op,
270 >        register int  sn
271 > )
272   {
273          double  rad2, roffs, offs, d, rd, rdoto;
274          FVECT  rnrm, nrm;
# Line 290 | Line 296 | register int  sn;
296   }
297  
298  
299 < int
300 < vstestvis(f, o, oc, or2, sn)            /* pretest source visibility */
301 < int  f;                 /* virtual source flags */
302 < OBJREC  *o;             /* relay object */
303 < FVECT  oc;              /* relay object center */
304 < double  or2;            /* relay object radius squared */
305 < register int  sn;       /* target source number */
299 > extern int
300 > vstestvis(              /* pretest source visibility */
301 >        int  f,                 /* virtual source flags */
302 >        OBJREC  *o,             /* relay object */
303 >        FVECT  oc,              /* relay object center */
304 >        double  or2,            /* relay object radius squared */
305 >        register int  sn        /* target source number */
306 > )
307   {
308          RAY  sr;
309          FVECT  onorm;
310          FVECT  offsdir;
311          SRCINDEX  si;
312 <        double  or, d;
312 >        double  or, d, d1;
313          int  stestlim, ssn;
314          int  nhit, nok;
315          register int  i, n;
# Line 354 | Line 361 | register int  sn;      /* target source number */
361                                  sr.rdir[i] = -onorm[i];
362                          }
363                          sr.rmax = 0.0;
364 <                        rayorigin(&sr, NULL, PRIMARY, 1.0);
364 >                        rayorigin(&sr, PRIMARY, NULL, NULL);
365                  } while (!(*ofun[o->otype].funp)(o, &sr));
366                                          /* check against source */
367                  VCOPY(sr.rorg, sr.rop); /* starting from intersection */
# Line 368 | Line 375 | register int  sn;      /* target source number */
375                  }
376                  sr.revf = srcvalue;
377                  rayvalue(&sr);                  /* check sample validity */
378 <                if (bright(sr.rcol) <= FTINY)
378 >                if ((d = bright(sr.rcol)) <= FTINY)
379                          continue;
380                  nok++;                  /* got sample; check obstructions */
381                  rayclear(&sr);
382                  sr.revf = raytrace;
383                  rayvalue(&sr);
384 <                if (bright(sr.rcol) > FTINY)
384 >                if ((d1 = bright(sr.rcol)) > FTINY) {
385 >                        if (d - d1 > FTINY) {
386 > #ifdef DEBUG
387 >                                fprintf(stderr, "\tpartially shadowed\n");
388 > #endif
389 >                                return(f);      /* intervening transmitter */
390 >                        }
391                          nhit++;
392 +                }
393                  if (nhit > 0 && nhit < nok) {
394   #ifdef DEBUG
395                          fprintf(stderr, "\tpartially occluded\n");
# Line 397 | Line 411 | register int  sn;      /* target source number */
411          
412  
413   #ifdef DEBUG
414 < void
415 < virtverb(sn, fp)        /* print verbose description of virtual source */
416 < register int  sn;
417 < FILE  *fp;
414 > extern void
415 > virtverb(       /* print verbose description of virtual source */
416 >        register int  sn,
417 >        FILE  *fp
418 > )
419   {
420          register int  i;
421  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines