| 25 |
|
extern double minweight; /* minimum ray weight */ |
| 26 |
|
extern int do_irrad; /* compute irradiance? */ |
| 27 |
|
|
| 28 |
< |
long raynum = 0L; /* next unique ray number */ |
| 29 |
< |
long nrays = 0L; /* number of calls to localhit */ |
| 28 |
> |
unsigned long raynum = 0; /* next unique ray number */ |
| 29 |
> |
unsigned long nrays = 0; /* number of calls to localhit */ |
| 30 |
|
|
| 31 |
|
static FLOAT Lambfa[5] = {PI, PI, PI, 0.0, 0.0}; |
| 32 |
|
OBJREC Lamb = { |
| 34 |
|
{0, 5, NULL, Lambfa}, NULL, |
| 35 |
|
}; /* a Lambertian surface */ |
| 36 |
|
|
| 37 |
+ |
static int raymove(), checkset(), checkhit(); |
| 38 |
+ |
|
| 39 |
|
#define MAXLOOP 128 /* modifier loop detection */ |
| 40 |
|
|
| 41 |
|
#define RAYHIT (-1) /* return value for intercepted ray */ |
| 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); |
| 464 |
|
checkset(oset, cxs); /* eliminate double-checking */ |
| 465 |
|
for (i = oset[0]; i > 0; i--) { |
| 466 |
|
o = objptr(oset[i]); |
| 464 |
– |
if (o->omod == OVOID && issurface(o->otype)) |
| 465 |
– |
continue; /* ignore void surfaces */ |
| 467 |
|
(*ofun[o->otype].funp)(o, r); |
| 468 |
|
} |
| 469 |
|
if (r->ro == NULL) |