72 |
|
addsrcspan(newspan(left,h,v,spanbr)); |
73 |
|
left = hsize + 1; |
74 |
|
} |
75 |
< |
addindirect(h, spanbr[h+hsize]); |
75 |
> |
addindirect(h, v, spanbr[h+hsize]); |
76 |
|
} |
77 |
|
} |
78 |
|
if (left < h) |
83 |
|
} |
84 |
|
|
85 |
|
|
86 |
< |
addindirect(h, br) /* add brightness to indirect illuminances */ |
87 |
< |
int h; |
86 |
> |
addindirect(h, v, br) /* add brightness to indirect illuminances */ |
87 |
> |
int h, v; |
88 |
|
double br; |
89 |
|
{ |
90 |
|
double tanb, d; |
91 |
+ |
int hl; |
92 |
|
register int i; |
93 |
|
|
94 |
< |
if (h <= -hlim) { /* left region */ |
95 |
< |
d = (double)(-h-hlim)/sampdens; |
94 |
> |
hl = hlim(v); |
95 |
> |
if (h <= -hl) { /* left region */ |
96 |
> |
d = (double)(-h-hl)/sampdens; |
97 |
|
if (d >= 1.0-FTINY) |
98 |
|
return; |
99 |
|
tanb = d/sqrt(1.0-d*d); |
106 |
|
} |
107 |
|
return; |
108 |
|
} |
109 |
< |
if (h >= hlim) { /* right region */ |
110 |
< |
d = (double)(-h+hlim)/sampdens; |
109 |
> |
if (h >= hl) { /* right region */ |
110 |
> |
d = (double)(-h+hl)/sampdens; |
111 |
|
if (d <= -1.0+FTINY) |
112 |
|
return; |
113 |
|
tanb = d/sqrt(1.0-d*d); |
122 |
|
} |
123 |
|
/* central region */ |
124 |
|
for (i = 0; i < nglardirs; i++) { |
125 |
< |
d = cos(h_theta(h) - indirect[i].theta); |
125 |
> |
d = cos(h_theta(h,v) - indirect[i].theta); |
126 |
|
if (d > 0.0) { |
127 |
|
indirect[i].sum += d * br; |
128 |
|
indirect[i].n += d; |
133 |
|
|
134 |
|
comp_thresh() /* compute glare threshold */ |
135 |
|
{ |
134 |
– |
SPANERR sperr; |
136 |
|
int h, v; |
137 |
|
int nsamps; |
138 |
|
double brsum, br; |
143 |
|
brsum = 0.0; |
144 |
|
nsamps = 0; |
145 |
|
for (v = vsize; v >= -vsize; v -= TSAMPSTEP) { |
145 |
– |
setspanerr(&sperr, v); |
146 |
|
for (h = -hsize; h <= hsize; h += TSAMPSTEP) { |
147 |
< |
if ((br = getviewpix(h, v, &sperr)) < 0.0) |
147 |
> |
if ((br = getviewpix(h, v)) < 0.0) |
148 |
|
continue; |
149 |
|
brsum += br; |
150 |
|
nsamps++; |
281 |
|
FVECT dthis, dright; |
282 |
|
register struct srcspan *ss; |
283 |
|
int h, n; |
284 |
< |
double d; |
284 |
> |
double hsum, vsum, d; |
285 |
|
|
286 |
|
sp->dom = 0.0; |
287 |
< |
sp->dir[0] = sp->dir[1] = sp->dir[2] = 0.0; |
287 |
> |
hsum = vsum = 0.0; |
288 |
|
sp->brt = 0.0; |
289 |
|
n = 0; |
290 |
|
for (ss = sp->first; ss != NULL; ss = ss->next) { |
291 |
|
sp->brt += ss->brsum; |
292 |
|
n += ss->r - ss->l; |
293 |
< |
if (compdir(dright, ss->r, ss->v, NULL) < 0) |
294 |
< |
compdir(dright, ss->r-2, ss->v, NULL); |
295 |
< |
for (h = ss->r-1; h >= ss->l; h--) |
296 |
< |
if (compdir(dthis, h, ss->v, NULL) == 0) { |
297 |
< |
d = dist2(dthis, dright); |
298 |
< |
fvsum(sp->dir, sp->dir, dthis, d); |
299 |
< |
sp->dom += d; |
300 |
< |
VCOPY(dright, dthis); |
301 |
< |
} |
293 |
> |
for (h = ss->r-1; h >= ss->l; h--) { |
294 |
> |
d = pixsize(h, ss->v); |
295 |
> |
hsum += d*h; |
296 |
> |
vsum += d*ss->v; |
297 |
> |
sp->dom += d; |
298 |
> |
} |
299 |
|
free((char *)ss); |
300 |
|
} |
301 |
|
sp->first = NULL; |
302 |
|
sp->brt /= (double)n; |
303 |
< |
normalize(sp->dir); |
303 |
> |
compdir(sp->dir, (int)(hsum/sp->dom), (int)(vsum/sp->dom)); |
304 |
|
sp->next = donelist; |
305 |
|
donelist = sp; |
306 |
|
if (verbose) |