110 |
|
/* set min & max radii */ |
111 |
|
if (ar <= 0) { |
112 |
|
minarad = 0; |
113 |
< |
maxarad = thescene.cusize / 2.0; |
113 |
> |
maxarad = thescene.cusize*0.5; |
114 |
|
} else { |
115 |
|
minarad = thescene.cusize / ar; |
116 |
< |
maxarad = 64 * minarad; /* heuristic */ |
117 |
< |
if (maxarad > thescene.cusize / 2.0) |
118 |
< |
maxarad = thescene.cusize / 2.0; |
116 |
> |
maxarad = 64.0 * minarad; /* heuristic */ |
117 |
> |
if (maxarad > thescene.cusize*0.5) |
118 |
> |
maxarad = thescene.cusize*0.5; |
119 |
|
} |
120 |
|
if (minarad <= FTINY) |
121 |
< |
minarad = 10*FTINY; |
121 |
> |
minarad = 10.0*FTINY; |
122 |
|
if (maxarad <= minarad) |
123 |
< |
maxarad = 64 * minarad; |
123 |
> |
maxarad = 64.0 * minarad; |
124 |
|
} |
125 |
|
|
126 |
|
|
363 |
|
FVECT ck0; |
364 |
|
int i, j; |
365 |
|
AMBVAL *av; |
366 |
+ |
|
367 |
+ |
if (at->kid != NULL) { /* sum children first */ |
368 |
+ |
s *= 0.5; |
369 |
+ |
for (i = 0; i < 8; i++) { |
370 |
+ |
for (j = 0; j < 3; j++) { |
371 |
+ |
ck0[j] = c0[j]; |
372 |
+ |
if (1<<j & i) |
373 |
+ |
ck0[j] += s; |
374 |
+ |
if (r->rop[j] < ck0[j] - OCTSCALE*s) |
375 |
+ |
break; |
376 |
+ |
if (r->rop[j] > ck0[j] + (1.0+OCTSCALE)*s) |
377 |
+ |
break; |
378 |
+ |
} |
379 |
+ |
if (j == 3) |
380 |
+ |
wsum += sumambient(acol, r, rn, al, |
381 |
+ |
at->kid+i, ck0, s); |
382 |
+ |
} |
383 |
+ |
/* good enough? */ |
384 |
+ |
if (wsum > 0.04 && s > (minarad*0.8+maxarad*0.2)) |
385 |
+ |
return(wsum); |
386 |
+ |
} |
387 |
|
/* sum this node */ |
388 |
|
for (av = at->alist; av != NULL; av = av->next) { |
389 |
|
double d, delta_r2, delta_t2; |
440 |
|
scalecolor(ct, d); |
441 |
|
addcolor(acol, ct); |
442 |
|
wsum += d; |
422 |
– |
} |
423 |
– |
if (at->kid == NULL) |
424 |
– |
return(wsum); |
425 |
– |
/* sum children */ |
426 |
– |
s *= 0.5; |
427 |
– |
for (i = 0; i < 8; i++) { |
428 |
– |
for (j = 0; j < 3; j++) { |
429 |
– |
ck0[j] = c0[j]; |
430 |
– |
if (1<<j & i) |
431 |
– |
ck0[j] += s; |
432 |
– |
if (r->rop[j] < ck0[j] - OCTSCALE*s) |
433 |
– |
break; |
434 |
– |
if (r->rop[j] > ck0[j] + (1.0+OCTSCALE)*s) |
435 |
– |
break; |
436 |
– |
} |
437 |
– |
if (j == 3) |
438 |
– |
wsum += sumambient(acol, r, rn, al, |
439 |
– |
at->kid+i, ck0, s); |
443 |
|
} |
444 |
|
return(wsum); |
445 |
|
} |