| 105 |
|
raycont(r) /* check for clipped object and continue */ |
| 106 |
|
register RAY *r; |
| 107 |
|
{ |
| 108 |
< |
if (r->clipset != NULL && inset(r->clipset, r->ro->omod)) |
| 108 |
> |
if ((r->clipset != NULL && inset(r->clipset, r->ro->omod)) || |
| 109 |
> |
r->ro->omod == OVOID) |
| 110 |
|
raytrans(r); |
| 111 |
|
else |
| 112 |
|
rayshade(r, r->ro->omod); |
| 331 |
|
sflags = 0; |
| 332 |
|
for (i = 0; i < 3; i++) { |
| 333 |
|
curpos[i] = r->rorg[i]; |
| 334 |
< |
if (r->rdir[i] > FTINY) |
| 334 |
> |
if (r->rdir[i] > 1e-7) |
| 335 |
|
sflags |= 1 << i; |
| 336 |
< |
else if (r->rdir[i] < -FTINY) |
| 336 |
> |
else if (r->rdir[i] < -1e-7) |
| 337 |
|
sflags |= 0x10 << i; |
| 338 |
|
} |
| 339 |
|
if (sflags == 0) |
| 464 |
|
checkset(oset, cxs); /* eliminate double-checking */ |
| 465 |
|
for (i = oset[0]; i > 0; i--) { |
| 466 |
|
o = objptr(oset[i]); |
| 466 |
– |
if (o->omod == OVOID && issurface(o->otype)) |
| 467 |
– |
continue; /* ignore void surfaces */ |
| 467 |
|
(*ofun[o->otype].funp)(o, r); |
| 468 |
|
} |
| 469 |
|
if (r->ro == NULL) |