27 |
|
|
28 |
|
typedef struct { |
29 |
|
COLOR v; /* hemisphere sample value */ |
30 |
< |
float d; /* reciprocal distance (1/rt) */ |
30 |
> |
float d; /* reciprocal distance */ |
31 |
|
FVECT p; /* intersection point */ |
32 |
|
} AMBSAMP; /* sample value */ |
33 |
|
|
131 |
|
dimlist[ndims++] = AI(hp,i,j) + 90171; |
132 |
|
rayvalue(&ar); /* evaluate ray */ |
133 |
|
ndims--; |
134 |
< |
if (ar.rt <= FTINY) |
134 |
> |
zd = raydistance(&ar); |
135 |
> |
if (zd <= FTINY) |
136 |
|
return(0); /* should never happen */ |
137 |
|
multcolor(ar.rcol, ar.rcoef); /* apply coefficient */ |
138 |
< |
if (ar.rt*ap->d < 1.0) /* new/closer distance? */ |
139 |
< |
ap->d = 1.0/ar.rt; |
138 |
> |
if (zd*ap->d < 1.0) /* new/closer distance? */ |
139 |
> |
ap->d = 1.0/zd; |
140 |
|
if (!n) { /* record first vertex & value */ |
141 |
< |
if (ar.rt > 10.0*thescene.cusize + 1000.) |
142 |
< |
ar.rt = 10.0*thescene.cusize + 1000.; |
143 |
< |
VSUM(ap->p, ar.rorg, ar.rdir, ar.rt); |
141 |
> |
if (zd > 10.0*thescene.cusize + 1000.) |
142 |
> |
zd = 10.0*thescene.cusize + 1000.; |
143 |
> |
VSUM(ap->p, ar.rorg, ar.rdir, zd); |
144 |
|
copycolor(ap->v, ar.rcol); |
145 |
|
} else { /* else update recorded value */ |
146 |
|
hp->acol[RED] -= colval(ap->v,RED); |
864 |
|
ndims--; |
865 |
|
multcolor(ar.rcol, ar.rcoef); /* apply coefficient */ |
866 |
|
addcolor(dp->v, ar.rcol); |
867 |
< |
/* use rt to improve gradient calc */ |
868 |
< |
if (ar.rt > FTINY && ar.rt < FHUGE) |
869 |
< |
dp->r += 1.0/ar.rt; |
867 |
> |
/* use rxt to improve gradient calc */ |
868 |
> |
if (ar.rxt > FTINY && ar.rxt < FHUGE) |
869 |
> |
dp->r += 1.0/ar.rxt; |
870 |
|
/* (re)initialize error */ |
871 |
|
if (dp->n++) { |
872 |
|
b2 = bright(dp->v)/dp->n - bright(ar.rcol); |