--- ray/src/rt/srcdraw.c 2004/09/02 04:16:58 2.12 +++ ray/src/rt/srcdraw.c 2004/10/26 19:04:32 2.15 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: srcdraw.c,v 2.12 2004/09/02 04:16:58 greg Exp $"; +static const char RCSid[] = "$Id: srcdraw.c,v 2.15 2004/10/26 19:04:32 greg Exp $"; #endif /* * Draw small sources into image in case we missed them. @@ -11,6 +11,7 @@ static const char RCSid[] = "$Id: srcdraw.c,v 2.12 200 #include "ray.h" #include "view.h" +#include "otypes.h" #include "source.h" @@ -373,6 +374,9 @@ init_drawsources( } /* loop through all sources */ for (i = nsources; i--; ) { + /* skip illum's */ + if (findmaterial(source[i].so)->otype == MAT_ILLUM) + continue; /* compute image polygon for source */ if (!(nsv = sourcepoly(i, spoly))) continue; @@ -444,27 +448,24 @@ drawsources( if (source[sp->sn].sflags & SSPOT && spotout(&sr, source[sp->sn].sl.s)) continue; /* outside spot */ - w = poly_area(ppoly, npv) * hres * vres; - if (w < .95) { /* subpixel source */ - rayorigin(&sr, NULL, SHADOW, 1.0); - sr.rsrc = sp->sn; - } else - rayorigin(&sr, NULL, PRIMARY, 1.0); + rayorigin(&sr, NULL, SHADOW, 1.0); + sr.rsrc = sp->sn; rayvalue(&sr); /* compute value */ if (bright(sr.rcol) <= FTINY) continue; /* missed/blocked */ /* modify pixel */ + w = poly_area(ppoly, npv) * hres * vres; if (zbf[y-y0] != NULL && - sr.rt < 0.99*zbf[y-y0][x-x0]) + sr.rt < 0.99*zbf[y-y0][x-x0]) { zbf[y-y0][x-x0] = sr.rt; - else if (!bigdiff(sr.rcol, pic[y-y0][x-x0], - 0.01)) /* source sample */ + } else if (!bigdiff(sr.rcol, pic[y-y0][x-x0], + 0.01)) { /* source sample */ scalecolor(pic[y-y0][x-x0], w); - else { - scalecolor(sr.rcol, w); - scalecolor(pic[y-y0][x-x0], 1.-w); - addcolor(pic[y-y0][x-x0], sr.rcol); + continue; } + scalecolor(sr.rcol, w); + scalecolor(pic[y-y0][x-x0], 1.-w); + addcolor(pic[y-y0][x-x0], sr.rcol); } } }