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; |