| 217 | 
  | 
                        raytrans(r); | 
| 218 | 
  | 
                        return(1); | 
| 219 | 
  | 
                } | 
| 220 | 
< | 
                if (!islight(m->otype)) | 
| 220 | 
> | 
                if (!islight(m->otype)) { | 
| 221 | 
> | 
                        setcolor(r->pcol, 1.0, 1.0, 1.0); | 
| 222 | 
  | 
                        return((*ofun[Lamb.otype].funp)(&Lamb, r)); | 
| 223 | 
+ | 
                } | 
| 224 | 
  | 
        } | 
| 225 | 
  | 
        return(0);              /* not a qualifying surface */ | 
| 226 | 
  | 
} | 
| 518 | 
  | 
        r->rflips++; | 
| 519 | 
  | 
} | 
| 520 | 
  | 
 | 
| 521 | 
+ | 
 | 
| 522 | 
+ | 
int | 
| 523 | 
+ | 
rayreject(              /* check if candidate hit is worse than current */ | 
| 524 | 
+ | 
        OBJREC *o, | 
| 525 | 
+ | 
        RAY *r, | 
| 526 | 
+ | 
        double t | 
| 527 | 
+ | 
) | 
| 528 | 
+ | 
{ | 
| 529 | 
+ | 
        OBJREC  *mnew, *mray; | 
| 530 | 
+ | 
 | 
| 531 | 
+ | 
        if ((t <= FTINY) | (t > r->rot + FTINY)) | 
| 532 | 
+ | 
                return(1); | 
| 533 | 
+ | 
        if (t < r->rot - FTINY)         /* is new hit significantly closer? */ | 
| 534 | 
+ | 
                return(0); | 
| 535 | 
+ | 
                                        /* coincident point, so decide... */ | 
| 536 | 
+ | 
        if (o == r->ro) | 
| 537 | 
+ | 
                return(1);              /* shouldn't happen */ | 
| 538 | 
+ | 
        if (r->ro == NULL) | 
| 539 | 
+ | 
                return(0);              /* ditto */ | 
| 540 | 
+ | 
        mnew = findmaterial(o); | 
| 541 | 
+ | 
        mray = findmaterial(r->ro);     /* check material transparencies */ | 
| 542 | 
+ | 
        if (mnew == NULL) { | 
| 543 | 
+ | 
                if (mray != NULL) | 
| 544 | 
+ | 
                        return(1);      /* new has no material */ | 
| 545 | 
+ | 
        } else if (mray == NULL) { | 
| 546 | 
+ | 
                return(0);              /* old has no material(!) */ | 
| 547 | 
+ | 
        } else if (istransp(mnew->otype)) { | 
| 548 | 
+ | 
                if (!istransp(mray->otype)) | 
| 549 | 
+ | 
                        return(1);      /* new is transparent */ | 
| 550 | 
+ | 
        } else if (istransp(mray->otype)) { | 
| 551 | 
+ | 
                return(0);              /* old is transparent */ | 
| 552 | 
+ | 
        } | 
| 553 | 
+ | 
                        /* weakest priority to later modifier definition */ | 
| 554 | 
+ | 
        return (r->ro->omod >= o->omod); | 
| 555 | 
+ | 
} | 
| 556 | 
  | 
 | 
| 557 | 
  | 
void | 
| 558 | 
  | 
rayhit(                 /* standard ray hit test */ |