267 |
|
evalue(mf->ep[5])); |
268 |
|
if (errno == EDOM || errno == ERANGE) |
269 |
|
objerror(m, WARNING, "compute error"); |
270 |
< |
else if (rayorigin(&sr, r, TRANS, bright(ctmp)) == 0) { |
270 |
> |
else if (rayorigin(&sr, TRANS, r, ctmp) == 0) { |
271 |
|
if (!(r->crtype & SHADOW) && hastexture) { |
272 |
|
for (i = 0; i < 3; i++) /* perturb direction */ |
273 |
|
sr.rdir[i] = r->rdir[i] - .75*r->pert[i]; |
279 |
|
VCOPY(sr.rdir, r->rdir); |
280 |
|
} |
281 |
|
rayvalue(&sr); |
282 |
< |
multcolor(sr.rcol, ctmp); |
282 |
> |
multcolor(sr.rcol, sr.rcoef); |
283 |
|
addcolor(r->rcol, sr.rcol); |
284 |
|
if (!hastexture) { |
285 |
|
transtest = 2.0*bright(sr.rcol); |
296 |
|
evalue(mf->ep[2])); |
297 |
|
if (errno == EDOM || errno == ERANGE) |
298 |
|
objerror(m, WARNING, "compute error"); |
299 |
< |
else if (rayorigin(&sr, r, REFLECTED, bright(ctmp)) == 0) { |
299 |
> |
else if (rayorigin(&sr, REFLECTED, r, ctmp) == 0) { |
300 |
|
for (i = 0; i < 3; i++) |
301 |
|
sr.rdir[i] = r->rdir[i] + 2.0*nd.pdot*nd.pnorm[i]; |
302 |
|
rayvalue(&sr); |
303 |
< |
multcolor(sr.rcol, ctmp); |
303 |
> |
multcolor(sr.rcol, sr.rcoef); |
304 |
|
addcolor(r->rcol, sr.rcol); |
305 |
|
if (!hastexture && r->ro != NULL && isflat(r->ro->otype)) { |
306 |
|
mirtest = 2.0*bright(sr.rcol); |
311 |
|
if (hasrefl) { |
312 |
|
if (!hitfront) |
313 |
|
flipsurface(r); |
314 |
< |
ambient(ctmp, r, nd.pnorm); |
315 |
< |
multcolor(ctmp, nd.rdiff); |
314 |
> |
copycolor(ctmp, nd.rdiff); |
315 |
> |
multambient(ctmp, r, nd.pnorm); |
316 |
|
addcolor(r->rcol, ctmp); /* add to returned color */ |
317 |
|
if (!hitfront) |
318 |
|
flipsurface(r); |
323 |
|
vtmp[0] = -nd.pnorm[0]; |
324 |
|
vtmp[1] = -nd.pnorm[1]; |
325 |
|
vtmp[2] = -nd.pnorm[2]; |
326 |
< |
ambient(ctmp, r, vtmp); |
327 |
< |
multcolor(ctmp, nd.tdiff); |
326 |
> |
copycolor(ctmp, nd.tdiff); |
327 |
> |
multambient(ctmp, r, vtmp); |
328 |
|
addcolor(r->rcol, ctmp); |
329 |
|
if (hitfront) |
330 |
|
flipsurface(r); |
407 |
|
} |
408 |
|
/* compute ambient */ |
409 |
|
if (nd.trans < 1.0-FTINY) { |
410 |
< |
ambient(ctmp, r, nd.pnorm); |
410 |
> |
copycolor(ctmp, nd.mcolor); /* modified by material color */ |
411 |
|
scalecolor(ctmp, 1.0-nd.trans); |
412 |
< |
multcolor(ctmp, nd.mcolor); /* modified by material color */ |
412 |
> |
multambient(ctmp, r, nd.pnorm); |
413 |
|
addcolor(r->rcol, ctmp); /* add to returned color */ |
414 |
|
} |
415 |
|
if (nd.trans > FTINY) { /* from other side */ |
417 |
|
vtmp[0] = -nd.pnorm[0]; |
418 |
|
vtmp[1] = -nd.pnorm[1]; |
419 |
|
vtmp[2] = -nd.pnorm[2]; |
420 |
< |
ambient(ctmp, r, vtmp); |
420 |
> |
copycolor(ctmp, nd.mcolor); |
421 |
|
scalecolor(ctmp, nd.trans); |
422 |
< |
multcolor(ctmp, nd.mcolor); |
422 |
> |
multambient(ctmp, r, vtmp); |
423 |
|
addcolor(r->rcol, ctmp); |
424 |
|
flipsurface(r); |
425 |
|
} |