--- ray/src/rt/ambcomp.c 1991/06/11 16:37:49 1.4 +++ ray/src/rt/ambcomp.c 1991/06/13 10:54:00 1.6 @@ -179,10 +179,27 @@ FVECT pg, dg; } addcolor(acol, dp->v); } - if (pg != NULL) - posgradient(pg, div, &hemi); - if (dg != NULL) - dirgradient(dg, div, &hemi); + b = bright(acol); + if (b > FTINY) { + b = ndivs/b; + if (pg != NULL) { + posgradient(pg, div, &hemi); + for (i = 0; i < 3; i++) + pg[i] *= b; + } + if (dg != NULL) { + dirgradient(dg, div, &hemi); + for (i = 0; i < 3; i++) + dg[i] *= b; + } + } else { + if (pg != NULL) + for (i = 0; i < 3; i++) + pg[i] = 0.0; + if (dg != NULL) + for (i = 0; i < 3; i++) + dg[i] = 0.0; + } free((char *)div); } b = 1.0/ndivs; @@ -238,6 +255,11 @@ register AMBHEMI *hp; dp = da; for (i = 0; i < hp->nt; i++) for (j = 0; j < hp->np; j++) { +#ifdef DEBUG + if (dp->t != i || dp->p != j) + error(CONSISTENCY, + "division order in comperrs"); +#endif b = bright(dp[0].v); if (i > 0) { /* from above */ b2 = bright(dp[-hp->np].v) - b; @@ -321,7 +343,7 @@ AMBHEMI *hp; yd += mag0*sinp + mag1*cosp; } for (i = 0; i < 3; i++) - gv[i] = xd*hp->ux[i] + yd*hp->uy[i]; + gv[i] = (xd*hp->ux[i] + yd*hp->uy[i])/PI; } @@ -353,5 +375,5 @@ AMBHEMI *hp; yd += mag * sin(phi); } for (i = 0; i < 3; i++) - gv[i] = (xd*hp->ux[i] + yd*hp->uy[i])/(hp->nt*hp->np); + gv[i] = (xd*hp->ux[i] + yd*hp->uy[i])*PI/(hp->nt*hp->np); }