151 |
|
if (ns > 0) { /* perform super-sampling */ |
152 |
|
comperrs(div, hemi); /* compute errors */ |
153 |
|
qsort(div, ndivs, sizeof(AMBSAMP), ambcmp); /* sort divs */ |
154 |
– |
dp = div + ndivs; /* skim excess */ |
155 |
– |
for (i = ndivs; i > ns; i--) { |
156 |
– |
dp--; |
157 |
– |
addcolor(acol, dp->v); |
158 |
– |
arad += dp->r; |
159 |
– |
} |
154 |
|
/* super-sample */ |
155 |
|
for (i = ns; i > 0; i--) { |
156 |
|
copystruct(&dnew, div); |
166 |
|
dp++; |
167 |
|
} |
168 |
|
copystruct(dp, &dnew); |
175 |
– |
/* extract darkest */ |
176 |
– |
if (i <= ndivs) { |
177 |
– |
dp = div + i-1; |
178 |
– |
arad += dp->r; |
179 |
– |
if (dp->n > 1) { |
180 |
– |
b = 1.0/dp->n; |
181 |
– |
scalecolor(dp->v, b); |
182 |
– |
dp->r *= b; |
183 |
– |
dp->n = 1; |
184 |
– |
} |
185 |
– |
addcolor(acol, dp->v); |
186 |
– |
} |
169 |
|
} |
170 |
|
if (pg != NULL || dg != NULL) /* restore order */ |
171 |
|
qsort(div, ndivs, sizeof(AMBSAMP), ambnorm); |
172 |
|
} |
173 |
|
/* compute returned values */ |
174 |
< |
if (pg != NULL) |
175 |
< |
posgradient(pg, div, &hemi); |
176 |
< |
if (dg != NULL) |
177 |
< |
dirgradient(dg, div, &hemi); |
178 |
< |
if (div != NULL) |
174 |
> |
if (div != NULL) { |
175 |
> |
for (i = ndivs, dp = div; i-- > 0; dp++) { |
176 |
> |
arad += dp->r; |
177 |
> |
if (dp->n > 1) { |
178 |
> |
b = 1.0/dp->n; |
179 |
> |
scalecolor(dp->v, b); |
180 |
> |
dp->r *= b; |
181 |
> |
dp->n = 1; |
182 |
> |
} |
183 |
> |
addcolor(acol, dp->v); |
184 |
> |
} |
185 |
> |
if (pg != NULL) |
186 |
> |
posgradient(pg, div, &hemi); |
187 |
> |
if (dg != NULL) |
188 |
> |
dirgradient(dg, div, &hemi); |
189 |
|
free((char *)div); |
190 |
+ |
} |
191 |
|
b = 1.0/ndivs; |
192 |
|
scalecolor(acol, b); |
193 |
|
if (arad <= FTINY) |
224 |
|
if (i >= 3) |
225 |
|
error(CONSISTENCY, "bad ray direction in inithemi"); |
226 |
|
hp->uy[i] = 1.0; |
227 |
< |
fcross(hp->ux, hp->uz, hp->uy); |
227 |
> |
fcross(hp->ux, hp->uy, hp->uz); |
228 |
|
normalize(hp->ux); |
229 |
< |
fcross(hp->uy, hp->ux, hp->uz); |
229 |
> |
fcross(hp->uy, hp->uz, hp->ux); |
230 |
|
} |
231 |
|
|
232 |
|
|