--- ray/src/rt/ambcomp.c 2003/02/25 02:47:22 2.10 +++ ray/src/rt/ambcomp.c 2005/04/13 23:00:59 2.13 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: ambcomp.c,v 2.10 2003/02/25 02:47:22 greg Exp $"; +static const char RCSid[] = "$Id: ambcomp.c,v 2.13 2005/04/13 23:00:59 greg Exp $"; #endif /* * Routines to compute "ambient" values using Monte Carlo @@ -34,7 +34,7 @@ AMBSAMP *d1, *d2; { register int c; - if (c = d1->t - d2->t) + if ( (c = d1->t - d2->t) ) return(c); return(d1->p - d2->p); } @@ -142,17 +142,17 @@ FVECT pg, dg; qsort(div, ndivs, sizeof(AMBSAMP), ambcmp); /* sort divs */ /* super-sample */ for (i = ns; i > 0; i--) { - copystruct(&dnew, div); + dnew = *div; if (divsample(&dnew, &hemi, r) < 0) goto oopsy; /* reinsert */ dp = div; j = ndivs < i ? ndivs : i; while (--j > 0 && dnew.k < dp[1].k) { - copystruct(dp, dp+1); + *dp = *(dp+1); dp++; } - copystruct(dp, &dnew); + *dp = dnew; } if (pg != NULL || dg != NULL) /* restore order */ qsort(div, ndivs, sizeof(AMBSAMP), ambnorm); @@ -230,11 +230,10 @@ double wt; { register int i; /* set number of divisions */ - if (wt < (.25*PI)/ambdiv+FTINY) { - hp->nt = hp->np = 0; - return; /* zero samples */ - } hp->nt = sqrt(ambdiv * wt / PI) + 0.5; + i = ambacc > FTINY ? 3 : 1; /* minimum number of samples */ + if (hp->nt < i) + hp->nt = i; hp->np = PI * hp->nt + 0.5; /* make axes */ VCOPY(hp->uz, r->ron);