100 |
|
errno = 0; |
101 |
|
va = mf->ep + 4*n; |
102 |
|
coef = evalue(va[0]); |
103 |
< |
if (errno == EDOM || errno == ERANGE) |
103 |
> |
if ((errno == EDOM) | (errno == ERANGE)) |
104 |
|
goto computerr; |
105 |
< |
if (coef <= FTINY || rayorigin(&nr, r, TRANS, coef) < 0) |
105 |
> |
setcolor(nr.rcoef, coef, coef, coef); |
106 |
> |
if (rayorigin(&nr, TRANS, r, nr.rcoef) < 0) |
107 |
|
return(0); |
108 |
|
va++; /* compute direction */ |
109 |
|
for (j = 0; j < 3; j++) { |
111 |
|
if (errno == EDOM || errno == ERANGE) |
112 |
|
goto computerr; |
113 |
|
} |
114 |
< |
if (mf->f != &unitxf) |
115 |
< |
multv3(nr.rdir, nr.rdir, mf->f->xfm); |
114 |
> |
if (mf->fxp != &unitxf) |
115 |
> |
multv3(nr.rdir, nr.rdir, mf->fxp->xfm); |
116 |
|
if (r->rox != NULL) |
117 |
|
multv3(nr.rdir, nr.rdir, r->rox->f.xfm); |
118 |
|
if (normalize(nr.rdir) == 0.0) |
121 |
|
if (r->rsrc >= 0) |
122 |
|
nr.rsrc = source[r->rsrc].sa.sv.sn; |
123 |
|
rayvalue(&nr); |
124 |
< |
scalecolor(nr.rcol, coef); |
124 |
> |
multcolor(nr.rcol, nr.rcoef); |
125 |
|
addcolor(r->rcol, nr.rcol); |
126 |
|
if (r->ro != NULL && isflat(r->ro->otype)) |
127 |
|
r->rt = r->rot + nr.rt; |
167 |
|
if (olddot <= FTINY && olddot >= -FTINY) |
168 |
|
return(0); /* old dir parallels plane */ |
169 |
|
tr.rmax = 0.0; |
170 |
< |
rayorigin(&tr, NULL, PRIMARY, 1.0); |
170 |
> |
rayorigin(&tr, PRIMARY, NULL, NULL); |
171 |
|
if (!(*ofun[o->otype].funp)(o, &tr)) |
172 |
|
return(0); /* no intersection! */ |
173 |
|
/* compute redirection */ |
190 |
|
if (errno == EDOM || errno == ERANGE) |
191 |
|
goto computerr; |
192 |
|
} |
193 |
< |
if (mf->f != &unitxf) |
194 |
< |
multv3(newdir, newdir, mf->f->xfm); |
193 |
> |
if (mf->fxp != &unitxf) |
194 |
> |
multv3(newdir, newdir, mf->fxp->xfm); |
195 |
|
/* normalization unnecessary */ |
196 |
|
newdot = DOT(newdir, nv); |
197 |
|
if (newdot <= FTINY && newdot >= -FTINY) |