| 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 |
|
|