395 |
|
|
396 |
|
void /* add sources smaller than rad to computed subimage */ |
397 |
|
drawsources( |
398 |
< |
COLOR *pic[], /* subimage pixel value array */ |
398 |
> |
COLORV *pic[], /* subimage pixel value array */ |
399 |
|
float *zbf[], /* subimage distance array (opt.) */ |
400 |
|
int x0, /* origin and size of subimage */ |
401 |
|
int xsiz, |
407 |
|
int nsv, npv; |
408 |
|
int xmin, xmax, ymin, ymax, x, y; |
409 |
|
RREAL cxy[2]; |
410 |
– |
COLOR rcol; |
410 |
|
double w; |
411 |
|
RAY sr; |
412 |
|
SPLIST *sp; |
433 |
|
ymax = spoly[i][1]*vres - FTINY; |
434 |
|
} |
435 |
|
/* evaluate each pixel in BBox */ |
436 |
< |
for (y = ymin; y <= ymax; y++) |
437 |
< |
for (x = xmin; x <= xmax; x++) { |
436 |
> |
for (y = ymin; y <= ymax; y++) { |
437 |
> |
COLORV *pp = pic[y-y0] + (xmin-x0)*NCSAMP; |
438 |
> |
for (x = xmin; x <= xmax; x++, pp += NCSAMP) { |
439 |
|
/* subarea for pixel */ |
440 |
|
npv = box_clip_poly(spoly, nsv, |
441 |
|
(double)x/hres, (x+1.)/hres, |
455 |
|
rayvalue(&sr); /* compute value */ |
456 |
|
if (sintens(sr.rcol) <= FTINY) |
457 |
|
continue; /* missed/blocked */ |
458 |
– |
scolor_rgb(rcol, sr.rcol); |
458 |
|
/* modify pixel */ |
459 |
|
w = poly_area(ppoly, npv) * hres * vres; |
460 |
|
if (zbf[y-y0] != NULL && |
461 |
|
sr.rxt < 0.99*zbf[y-y0][x-x0]) { |
462 |
|
zbf[y-y0][x-x0] = sr.rxt; |
463 |
< |
} else if (!bigdiff(rcol, pic[y-y0][x-x0], |
464 |
< |
0.01)) { /* source sample */ |
466 |
< |
scalecolor(pic[y-y0][x-x0], w); |
463 |
> |
} else if (!sbigsdiff(sr.rcol, pp, 0.01)) { /* source sample */ |
464 |
> |
scalescolor(pp, w); |
465 |
|
continue; |
466 |
|
} |
467 |
< |
scalecolor(rcol, w); |
468 |
< |
scalecolor(pic[y-y0][x-x0], 1.-w); |
469 |
< |
addcolor(pic[y-y0][x-x0], rcol); |
467 |
> |
scalescolor(sr.rcol, w); |
468 |
> |
scalescolor(pp, 1.-w); |
469 |
> |
saddscolor(pp, sr.rcol); |
470 |
|
} |
471 |
+ |
} |
472 |
|
} |
473 |
|
} |