| 22 |
|
|
| 23 |
|
#define veilscan(y) (veilimg+(y)*fvxr) |
| 24 |
|
|
| 25 |
< |
static FVECT *raydir = NULL; /* ray direction for each pixel */ |
| 25 |
> |
static float (*raydir)[3] = NULL; /* ray direction for each pixel */ |
| 26 |
|
|
| 27 |
|
#define rdirscan(y) (raydir+(y)*fvxr) |
| 28 |
|
|
| 29 |
|
|
| 30 |
|
compraydir() /* compute ray directions */ |
| 31 |
|
{ |
| 32 |
< |
FVECT rorg; |
| 32 |
> |
FVECT rorg, rdir; |
| 33 |
|
double h, v; |
| 34 |
|
register int x, y; |
| 35 |
|
|
| 36 |
|
if (raydir != NULL) /* already done? */ |
| 37 |
|
return; |
| 38 |
< |
raydir = (FVECT *)malloc(fvxr*fvyr*sizeof(FVECT)); |
| 38 |
> |
raydir = (float (*)[3])malloc(fvxr*fvyr*3*sizeof(float)); |
| 39 |
|
if (raydir == NULL) |
| 40 |
|
syserror("malloc"); |
| 41 |
|
|
| 61 |
|
case YDECR: case YDECR|XDECR: |
| 62 |
|
v = 1. - (x+.5)/fvxr; break; |
| 63 |
|
} |
| 64 |
< |
if (viewray(rorg, rdirscan(y)[x], &ourview, h, v) |
| 65 |
< |
< -FTINY) { |
| 64 |
> |
if (viewray(rorg, rdir, &ourview, h, v) |
| 65 |
> |
>= -FTINY) { |
| 66 |
> |
rdirscan(y)[x][0] = rdir[0]; |
| 67 |
> |
rdirscan(y)[x][1] = rdir[1]; |
| 68 |
> |
rdirscan(y)[x][2] = rdir[2]; |
| 69 |
> |
} else { |
| 70 |
|
rdirscan(y)[x][0] = |
| 71 |
|
rdirscan(y)[x][1] = |
| 72 |
|
rdirscan(y)[x][2] = 0.0; |