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

Comparing ray/src/rt/raytrace.c (file contents):
Revision 2.51 by greg, Tue May 31 18:01:09 2005 UTC vs.
Revision 2.53 by greg, Thu Jun 23 09:11:38 2005 UTC

# Line 93 | Line 93 | rayorigin(             /* start new ray from old one */
93                                  colval(ro->cext,RED) : colval(ro->cext,GRN);
94                  if (colval(ro->cext,BLU) < re) re = colval(ro->cext,BLU);
95                  re *= ro->rot;
96 <                if (re > .1)
97 <                        r->rweight *= exp(-re);
96 >                if (re > 0.1)
97 >                        if (re > 92.)
98 >                                r->rweight = 0.0;
99 >                        else
100 >                                r->rweight *= exp(-re);
101          }
102          rayclear(r);
103 +        if (r->rweight <= 0.0)                  /* check for expiration */
104 +                return(-1);
105 +        if (r->crtype & SHADOW)                 /* shadow commitment */
106 +                return(0);
107          if (maxdepth <= 0 && rc != NULL) {      /* Russian roulette */
108                  if (minweight <= 0.0)
109                          error(USER, "zero ray weight in Russian roulette");
# Line 346 | Line 353 | raydist(               /* compute (cumulative) ray distance */
353  
354   extern void
355   raycontrib(             /* compute (cumulative) ray contribution */
356 <        COLOR  rc,
356 >        double  rc[3],
357          const RAY  *r,
358          int  flags
359   )
360   {
361 <        COLOR   eext, ext1;
362 <        
356 <        setcolor(eext, 0., 0., 0.);
357 <        setcolor(rc, 1., 1., 1.);
361 >        double  eext[3];
362 >        int     i;
363  
364 +        eext[0] = eext[1] = eext[2] = 0.;
365 +        rc[0] = rc[1] = rc[2] = 1.;
366 +
367          while (r != NULL && r->crtype&flags) {
368 <                multcolor(rc, r->rcoef);
369 <                copycolor(ext1, r->cext);
370 <                scalecolor(ext1, r->rot);
371 <                addcolor(eext, ext1);
368 >                for (i = 3; i--; ) {
369 >                        rc[i] *= colval(r->rcoef,i);
370 >                        eext[i] += r->rot * colval(r->cext,i);
371 >                }
372                  r = r->parent;
373          }
374 <        if (intens(eext) > FTINY) {
375 <                setcolor(ext1,  exp(-colval(eext,RED)),
376 <                                exp(-colval(eext,GRN)),
369 <                                exp(-colval(eext,BLU)));
370 <                multcolor(rc, ext1);
371 <        }
374 >        for (i = 3; i--; )
375 >                rc[i] *= (eext[i] <= FTINY) ? 1. :
376 >                                (eext[i] > 92.) ? 0. : exp(-eext[i]);
377   }
378  
379  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines