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

Comparing ray/src/rt/source.c (file contents):
Revision 2.12 by greg, Wed Aug 18 00:19:05 1993 UTC vs.
Revision 2.14 by greg, Wed Jan 12 21:25:59 1994 UTC

# Line 299 | Line 299 | char  *p;                      /* data for f */
299                                                  /* modify threshold */
300          ourthresh = shadthresh / r->rweight;
301                                                  /* test for shadows */
302 <        nhits = 0;
303 <        for (sn = 0; sn < ncnts; sn++) {
302 >        for (nhits = 0, hwt = 0.0, sn = 0; sn < ncnts;
303 >                        hwt += (double)source[scp->sno].nhits /
304 >                                (double)source[scp->sno].ntests,
305 >                        sn++) {
306                                                  /* check threshold */
307                  if ((sn+nshadcheck>=ncnts ? cntord[sn].brt :
308                                  cntord[sn].brt-cntord[sn+nshadcheck].brt)
# Line 329 | Line 331 | char  *p;                      /* data for f */
331                  nhits++;
332                  source[scp->sno].nhits++;
333          }
334 <                                        /* surface hit rate */
335 <        if (sn > 0)
336 <                hwt = (double)nhits / (double)sn;
334 >                                        /* source hit rate */
335 >        if (hwt > FTINY)
336 >                hwt = (double)nhits / hwt;
337          else
338                  hwt = 0.5;
339   #ifdef DEBUG
340 <        sprintf(errmsg, "%d tested, %d untested, %f hit rate\n",
340 >        sprintf(errmsg, "%d tested, %d untested, %f conditional hit rate\n",
341                          sn, ncnts-sn, hwt);
342          eputs(errmsg);
343   #endif
# Line 344 | Line 346 | char  *p;                      /* data for f */
346                  scp = srccnt + cntord[sn].sndx;
347                  prob = hwt * (double)source[scp->sno].nhits /
348                                  (double)source[scp->sno].ntests;
349 +                if (prob > 1.0)
350 +                        prob = 1.0;
351                  scalecolor(scp->val, prob);
352                  addcolor(r->rcol, scp->val);
353          }
# Line 434 | Line 438 | register RAY  *r;
438   {
439                                                  /* check for over-counting */
440          if (badcomponent(m, r))
441 <                return;
441 >                return(1);
442          if (wrongsource(m,r))
443 <                return;
443 >                return(1);
444                                                  /* check for passed illum */
445          if (passillum(m, r)) {
446 <                if (m->oargs.nsargs < 1 || !strcmp(m->oargs.sarg[0], VOIDID))
447 <                        raytrans(r);
448 <                else
449 <                        rayshade(r, modifier(m->oargs.sarg[0]));
446 <                return;
446 >                if (m->oargs.nsargs && strcmp(m->oargs.sarg[0], VOIDID))
447 >                        return(rayshade(r, modifier(m->oargs.sarg[0])));
448 >                raytrans(r);
449 >                return(1);
450          }
451                                          /* otherwise treat as source */
452                                                  /* check for behind */
453          if (r->rod < 0.0)
454 <                return;
454 >                return(1);
455                                                  /* check for invisibility */
456          if (srcignore(m, r))
457 <                return;
457 >                return(1);
458                                                  /* check for outside spot */
459          if (m->otype==MAT_SPOT && spotout(r, makespot(m), r->rot>=FHUGE))
460 <                return;
460 >                return(1);
461                                                  /* get distribution pattern */
462          raytexture(r, m->omod);
463                                                  /* get source color */
# Line 463 | Line 466 | register RAY  *r;
466                            m->oargs.farg[2]);
467                                                  /* modify value */
468          multcolor(r->rcol, r->pcol);
469 +        return(1);
470   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines