60 |
|
if (!issurface(o->otype) || o->omod == OVOID) |
61 |
|
continue; |
62 |
|
/* find material */ |
63 |
< |
m = findmaterial(objptr(o->omod)); |
63 |
> |
m = findmaterial(o); |
64 |
|
if (m == NULL) |
65 |
|
continue; |
66 |
|
if (m->otype == MAT_CLIP) { |
154 |
|
if ((o->otype != OBJ_SOURCE) | (o->omod == OVOID)) |
155 |
|
continue; |
156 |
|
/* find material */ |
157 |
< |
m = findmaterial(objptr(o->omod)); |
157 |
> |
m = findmaterial(o); |
158 |
|
if (m == NULL) |
159 |
|
continue; |
160 |
|
if (!islight(m->otype)) |
294 |
|
|
295 |
|
static int |
296 |
|
transillum( /* check if material is transparent illum */ |
297 |
< |
OBJECT obj |
297 |
> |
OBJREC *m |
298 |
|
) |
299 |
|
{ |
300 |
< |
OBJREC *m = findmaterial(objptr(obj)); |
301 |
< |
|
300 |
> |
m = findmaterial(m); |
301 |
|
if (m == NULL) |
302 |
|
return(1); |
303 |
|
if (m->otype != MAT_ILLUM) |
330 |
|
*/ |
331 |
|
if (2.*PI*(1. - DOT(source[i].sloc,r->rdir)) > source[i].ss2) |
332 |
|
continue; |
333 |
< |
/* is it the only possibility? */ |
334 |
< |
if (first == last) { |
333 |
> |
/* is it what we aimed for? */ |
334 |
> |
if (i == r->rsrc) { |
335 |
|
r->ro = source[i].so; |
336 |
|
break; |
337 |
|
} |
343 |
|
glowsrc = i; |
344 |
|
continue; |
345 |
|
} |
346 |
< |
if (transillum(source[i].so->omod)) { |
346 |
> |
if (transillum(source[i].so)) { |
347 |
|
if (transrc < 0) |
348 |
|
transrc = i; |
349 |
|
continue; |
363 |
|
return(0); /* nothing usable */ |
364 |
|
} |
365 |
|
/* |
366 |
< |
* Make assignments. |
366 |
> |
* Assign object index |
367 |
|
*/ |
368 |
|
r->robj = objndx(r->ro); |
370 |
– |
for (i = 0; i < 3; i++) |
371 |
– |
r->ron[i] = -r->rdir[i]; |
372 |
– |
r->rod = 1.0; |
373 |
– |
r->pert[0] = r->pert[1] = r->pert[2] = 0.0; |
374 |
– |
r->uv[0] = r->uv[1] = 0.0; |
375 |
– |
r->rox = NULL; |
369 |
|
return(1); |
370 |
|
} |
371 |
|
|
470 |
|
/* compute number to check */ |
471 |
|
nshadcheck = pow((double)ncnts, shadcert) + .5; |
472 |
|
/* modify threshold */ |
473 |
< |
if (ncnts > MINSHADCNT) |
481 |
< |
ourthresh = shadthresh / r->rweight; |
482 |
< |
else |
483 |
< |
ourthresh = 0; |
473 |
> |
ourthresh = shadthresh / r->rweight; |
474 |
|
/* test for shadows */ |
475 |
|
for (nhits = 0, hwt = 0.0, sn = 0; sn < ncnts; |
476 |
|
hwt += (double)source[scp->sno].nhits / |
477 |
|
(double)source[scp->sno].ntests, |
478 |
|
sn++) { |
479 |
|
/* check threshold */ |
480 |
< |
if ((sn+nshadcheck>=ncnts ? cntord[sn].brt : |
480 |
> |
if (sn >= MINSHADCNT && |
481 |
> |
(sn+nshadcheck>=ncnts ? cntord[sn].brt : |
482 |
|
cntord[sn].brt-cntord[sn+nshadcheck].brt) |
483 |
< |
< ourthresh*bright(r->rcol)) |
483 |
> |
< ourthresh*bright(r->rcol)) |
484 |
|
break; |
485 |
|
scp = srccnt + cntord[sn].sndx; |
486 |
|
/* test for hit */ |
663 |
|
*/ |
664 |
|
|
665 |
|
static int |
666 |
< |
weaksrcmat(OBJECT obj) /* identify material */ |
666 |
> |
weaksrcmat(OBJREC *m) /* identify material */ |
667 |
|
{ |
668 |
< |
OBJREC *m = findmaterial(objptr(obj)); |
678 |
< |
|
668 |
> |
m = findmaterial(m); |
669 |
|
if (m == NULL) return(0); |
670 |
|
return((m->otype==MAT_ILLUM) | (m->otype==MAT_GLOW)); |
671 |
|
} |
672 |
|
|
673 |
|
#define illumblock(m, r) (!(source[r->rsrc].sflags&SVIRTUAL) && \ |
674 |
|
r->rod > 0.0 && \ |
675 |
< |
weaksrcmat(source[r->rsrc].so->omod)) |
675 |
> |
weaksrcmat(source[r->rsrc].so)) |
676 |
|
|
677 |
|
/* wrongsource * |
678 |
|
* |