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

Comparing ray/src/rt/ambcomp.c (file contents):
Revision 2.16 by greg, Tue May 31 18:01:09 2005 UTC vs.
Revision 2.18 by greg, Mon Jun 6 19:14:28 2005 UTC

# Line 77 | Line 77 | divsample(                             /* sample a division */
77                  copycolor(ar.rcoef, h->acoef);
78          if (rayorigin(&ar, AMBIENT, r, ar.rcoef) < 0)
79                  return(-1);
80 <        if (ambacc > FTINY)
81 <                copycolor(ar.rcoef, h->acoef);
80 >        if (ambacc > FTINY) {
81 >                multcolor(ar.rcoef, h->acoef);
82 >                scalecolor(ar.rcoef, 1./AVGREFL);
83 >        }
84          hlist[0] = r->rno;
85          hlist[1] = dp->t;
86          hlist[2] = dp->p;
# Line 164 | Line 166 | doambient(                             /* compute ambient component */
166                                          /* initialize hemisphere */
167          inithemi(&hemi, acol, r, wt);
168          ndivs = hemi.nt * hemi.np;
169 <                                        /* initialize sum */
169 >                                        /* initialize */
170 >        if (pg != NULL)
171 >                pg[0] = pg[1] = pg[2] = 0.0;
172 >        if (dg != NULL)
173 >                dg[0] = dg[1] = dg[2] = 0.0;
174          setcolor(acol, 0.0, 0.0, 0.0);
175          if (ndivs == 0)
176                  return(0.0);
# Line 186 | Line 192 | doambient(                             /* compute ambient component */
192                          dp->r = 0.0;
193                          dp->n = 0;
194                          if (divsample(dp, &hemi, r) < 0) {
195 <                                if (div != NULL) dp++;
195 >                                if (div == NULL) continue;
196 >                                dp++;
197 >                                hemi.ns = 0;    /* incomplete sampling */
198 >                                pg = dg = NULL;
199                                  continue;
200                          }
201                          arad += dp->r;
# Line 233 | Line 242 | doambient(                             /* compute ambient component */
242                  }
243                  b = bright(acol);
244                  if (b > FTINY) {
245 <                        b = 1.0/b;      /* normalize gradient(s) */
245 >                        b = 1.0/b;      /* compute & normalize gradient(s) */
246                          if (pg != NULL) {
247                                  posgradient(pg, div, &hemi);
248                                  for (i = 0; i < 3; i++)
# Line 244 | Line 253 | doambient(                             /* compute ambient component */
253                                  for (i = 0; i < 3; i++)
254                                          dg[i] *= b;
255                          }
247                } else {
248                        if (pg != NULL)
249                                for (i = 0; i < 3; i++)
250                                        pg[i] = 0.0;
251                        if (dg != NULL)
252                                for (i = 0; i < 3; i++)
253                                        dg[i] = 0.0;
256                  }
257                  free((void *)div);
258          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines