| 8 |
|
*/ |
| 9 |
|
|
| 10 |
|
#include "platform.h" |
| 11 |
+ |
#include "standard.h" |
| 12 |
|
#include "rtprocess.h" |
| 12 |
– |
#include "rterror.h" |
| 13 |
– |
#include "rtmisc.h" |
| 13 |
|
#include "color.h" |
| 14 |
|
#include "calcomp.h" |
| 15 |
|
#include "view.h" |
| 334 |
|
static void |
| 335 |
|
init(void) /* perform final setup */ |
| 336 |
|
{ |
| 338 |
– |
double l_colin(char *), l_expos(char *), l_pixaspect(char *), |
| 339 |
– |
l_ray(char *), l_psize(char *); |
| 337 |
|
register int i; |
| 338 |
|
/* define constants */ |
| 339 |
|
varset("PI", ':', PI); |
| 601 |
|
if (input[fn].vw.type == 0) |
| 602 |
|
errno = EDOM; |
| 603 |
|
else if (input[fn].vw.type != VT_PAR && |
| 604 |
< |
funvalue(vray[6], 1, &d) >= 0) { |
| 604 |
> |
funvalue(vray[6], 1, &d) > FTINY) { |
| 605 |
|
for (i = 0; i < 3; i++) |
| 606 |
|
dir0[i] = funvalue(vray[3+i], 1, &d); |
| 607 |
|
pix2loc(locx, &input[fn].rs, xscan+1, ymax-1-yscan); |
| 608 |
|
pix2loc(locy, &input[fn].rs, xscan, ymax-yscan); |
| 609 |
|
if (viewray(org, dirx, &input[fn].vw, |
| 610 |
< |
locx[0], locx[1]) >= 0 && |
| 610 |
> |
locx[0], locx[1]) >= -FTINY && |
| 611 |
|
viewray(org, diry, &input[fn].vw, |
| 612 |
< |
locy[0], locy[1]) >= 0) { |
| 612 |
> |
locy[0], locy[1]) >= -FTINY) { |
| 613 |
|
/* approximate solid angle */ |
| 614 |
|
for (i = 0; i < 3; i++) { |
| 615 |
|
dirx[i] -= dir0[i]; |
| 616 |
|
diry[i] -= dir0[i]; |
| 617 |
|
} |
| 618 |
|
fcross(dir0, dirx, diry); |
| 619 |
< |
psize[fn] = sqrt(DOT(dir0,dir0)); |
| 619 |
> |
psize[fn] = VLEN(dir0); |
| 620 |
|
} |
| 621 |
|
} |
| 622 |
|
ltick[fn] = eclock; |