296 |
|
|
297 |
|
|
298 |
|
double |
299 |
< |
hdinter(gc, r, hp, ro, rd) /* compute ray intersection with section */ |
299 |
> |
hdinter(gc, r, ed, hp, ro, rd) /* compute ray intersection with section */ |
300 |
|
register GCOORD gc[2]; /* returned */ |
301 |
|
BYTE r[2][2]; /* returned */ |
302 |
+ |
double *ed; /* returned (optional) */ |
303 |
|
register HOLO *hp; |
304 |
|
FVECT ro, rd; /* rd should be normalized */ |
305 |
|
{ |
360 |
|
return(FHUGE); /* outside wall */ |
361 |
|
r[i][1] = 256. * (d - gc[i].i[1]); |
362 |
|
} |
363 |
< |
/* return distance from entry point */ |
364 |
< |
vt[0] = ro[0] - p[0][0]; |
365 |
< |
vt[1] = ro[1] - p[0][1]; |
366 |
< |
vt[2] = ro[2] - p[0][2]; |
366 |
< |
return(DOT(vt,rd)); |
363 |
> |
|
364 |
> |
if (ed != NULL) /* assign distance to exit point */ |
365 |
> |
*ed = t1; |
366 |
> |
return(t0); /* return distance to entry point */ |
367 |
|
} |