| 523 |
|
rayreject( /* check if candidate hit is worse than current */ |
| 524 |
|
OBJREC *o, |
| 525 |
|
RAY *r, |
| 526 |
< |
double t |
| 526 |
> |
double t, |
| 527 |
> |
double rod |
| 528 |
|
) |
| 529 |
|
{ |
| 530 |
|
OBJREC *mnew, *mray; |
| 542 |
|
mray = findmaterial(r->ro); /* check material transparencies */ |
| 543 |
|
if (mnew == NULL) { |
| 544 |
|
if (mray != NULL) |
| 545 |
< |
return(1); /* new has no material */ |
| 545 |
> |
return(1); /* old has material, new does not */ |
| 546 |
|
} else if (mray == NULL) { |
| 547 |
< |
return(0); /* old has no material(!) */ |
| 547 |
> |
return(0); /* new has material, old does not */ |
| 548 |
|
} else if (istransp(mnew->otype)) { |
| 549 |
|
if (!istransp(mray->otype)) |
| 550 |
< |
return(1); /* new is transparent */ |
| 550 |
> |
return(1); /* new is transparent, old is not */ |
| 551 |
|
} else if (istransp(mray->otype)) { |
| 552 |
< |
return(0); /* old is transparent */ |
| 552 |
> |
return(0); /* old is transparent, new is not */ |
| 553 |
|
} |
| 554 |
< |
/* weakest priority to later modifier definition */ |
| 554 |
> |
if (rod <= 0) { /* check which side we hit */ |
| 555 |
> |
if (r->rod > 0) |
| 556 |
> |
return(1); /* old hit front, new did not */ |
| 557 |
> |
} else if (r->rod <= 0) { |
| 558 |
> |
return(0); /* new hit front, old did not */ |
| 559 |
> |
} |
| 560 |
> |
/* earlier modifier definition wins tie */ |
| 561 |
|
return (r->ro->omod >= o->omod); |
| 562 |
|
} |
| 563 |
|
|