| 65 |
|
} |
| 66 |
|
|
| 67 |
|
|
| 68 |
+ |
normaspect(va, ap, xp, yp) /* fix pixel aspect or resolution */ |
| 69 |
+ |
double va; /* view aspect ratio */ |
| 70 |
+ |
double *ap; /* pixel aspect in (or out if 0) */ |
| 71 |
+ |
int *xp, *yp; /* x and y resolution in (or out if *ap!=0) */ |
| 72 |
+ |
{ |
| 73 |
+ |
if (*ap <= FTINY) |
| 74 |
+ |
*ap = va * *xp / *yp; /* compute pixel aspect */ |
| 75 |
+ |
else if (va * *xp > *ap * *yp) |
| 76 |
+ |
*xp = *yp / va * *ap + .5; /* reduce x resolution */ |
| 77 |
+ |
else |
| 78 |
+ |
*yp = *xp * va / *ap + .5; /* reduce y resolution */ |
| 79 |
+ |
} |
| 80 |
+ |
|
| 81 |
+ |
|
| 82 |
|
viewray(orig, direc, v, x, y) /* compute ray origin and direction */ |
| 83 |
|
FVECT orig, direc; |
| 84 |
|
register VIEW *v; |
| 143 |
|
#define check(c,n) if ((av[0][c]&&av[0][c]!=' ') || n>=ac) return(-1) |
| 144 |
|
extern double atof(); |
| 145 |
|
|
| 146 |
< |
if (av[0][0] != '-' || av[0][1] != 'v') |
| 146 |
> |
if (ac <= 0 || av[0][0] != '-' || av[0][1] != 'v') |
| 147 |
|
return(-1); |
| 148 |
|
switch (av[0][2]) { |
| 149 |
|
case 't': /* type */ |
| 205 |
|
|
| 206 |
|
while (*s == ' ') |
| 207 |
|
s++; |
| 208 |
< |
do { |
| 208 |
> |
while (*s) { |
| 209 |
|
ac = 0; |
| 210 |
|
do { |
| 211 |
|
av[ac++] = s; |
| 218 |
|
if (na+1 < ac) |
| 219 |
|
s = av[na+1]; |
| 220 |
|
nvopts++; |
| 221 |
< |
} |
| 222 |
< |
} while (*s); |
| 221 |
> |
} else if (ac > 1) |
| 222 |
> |
s = av[1]; |
| 223 |
> |
} |
| 224 |
|
return(nvopts); |
| 225 |
|
} |
| 226 |
|
|
| 234 |
|
fprintf(fp, " -vd %.6g %.6g %.6g", vp->vdir[0], vp->vdir[1], vp->vdir[2]); |
| 235 |
|
fprintf(fp, " -vu %.6g %.6g %.6g", vp->vup[0], vp->vup[1], vp->vup[2]); |
| 236 |
|
fprintf(fp, " -vh %.6g -vv %.6g", vp->horiz, vp->vert); |
| 237 |
< |
fprintf(fp, " -vs %d -vl %d", vp->hoff, vp->voff); |
| 237 |
> |
fprintf(fp, " -vs %.6g -vl %.6g", vp->hoff, vp->voff); |
| 238 |
|
} |
| 239 |
|
|
| 240 |
|
|
| 259 |
|
|
| 260 |
|
|
| 261 |
|
int |
| 262 |
< |
viewfile(fname, vp) /* get view from file */ |
| 262 |
> |
viewfile(fname, vp, xp, yp) /* get view from file */ |
| 263 |
|
char *fname; |
| 264 |
|
VIEW *vp; |
| 265 |
+ |
int *xp, *yp; |
| 266 |
|
{ |
| 267 |
|
extern char *progname; |
| 268 |
|
FILE *fp; |
| 275 |
|
gothview = 0; |
| 276 |
|
|
| 277 |
|
getheader(fp, gethview); |
| 278 |
+ |
|
| 279 |
+ |
if (xp != NULL && yp != NULL |
| 280 |
+ |
&& fgetresolu(xp, yp, fp) == -1) |
| 281 |
+ |
gothview = 0; |
| 282 |
|
|
| 283 |
|
fclose(fp); |
| 284 |
|
|