118 |
|
*/ |
119 |
|
/* add source width if flat */ |
120 |
|
if (np->specfl & SP_FLAT) |
121 |
< |
au2 = av2 = omega * (0.25/PI); |
121 |
> |
au2 = av2 = (1. - dstrsrc) * omega * (0.25/PI); |
122 |
|
else |
123 |
|
au2 = av2 = 0.0; |
124 |
|
au2 += np->u_alpha*np->u_alpha; |
160 |
|
if (dtmp > FTINY*FTINY) { |
161 |
|
dtmp1 = DOT(h,np->pnorm); |
162 |
|
dtmp = 1.0 - dtmp1*dtmp1/dtmp; |
163 |
< |
if (dtmp > FTINY*FTINY) { |
164 |
< |
dtmp1 = DOT(h,np->u); |
165 |
< |
dtmp1 *= dtmp1 / au2; |
166 |
< |
dtmp2 = DOT(h,np->v); |
167 |
< |
dtmp2 *= dtmp2 / av2; |
168 |
< |
dtmp = (dtmp1 + dtmp2) / dtmp; |
169 |
< |
} |
163 |
> |
} |
164 |
> |
if (dtmp > FTINY*FTINY) { |
165 |
> |
dtmp1 = DOT(h,np->u); |
166 |
> |
dtmp1 *= dtmp1 / au2; |
167 |
> |
dtmp2 = DOT(h,np->v); |
168 |
> |
dtmp2 *= dtmp2 / av2; |
169 |
> |
dtmp = (dtmp1 + dtmp2) / dtmp; |
170 |
> |
dtmp = exp(-dtmp); |
171 |
|
} else |
172 |
< |
dtmp = 0.0; |
172 |
> |
dtmp = 1.0; |
173 |
|
/* Gaussian */ |
174 |
< |
dtmp = exp(-dtmp) * (1.0/PI) * sqrt(-ldot/(np->pdot*au2*av2)); |
174 |
> |
dtmp *= (1.0/PI) * sqrt(-ldot/(np->pdot*au2*av2)); |
175 |
|
/* worth using? */ |
176 |
|
if (dtmp > FTINY) { |
177 |
|
copyscolor(sctmp, np->mcolor); |
265 |
|
/* diffuse reflection */ |
266 |
|
nd.rdiff = 1.0 - nd.trans - nd.rspec; |
267 |
|
|
268 |
< |
if (r->ro != NULL && isflat(r->ro->otype)) |
268 |
> |
if (r->ro != NULL && isflat(r->ro->otype) && |
269 |
> |
DOT(r->pert,r->pert) <= FTINY*FTINY) |
270 |
|
nd.specfl |= SP_FLAT; |
271 |
|
|
272 |
|
getacoords(&nd); /* set up coordinates */ |
324 |
|
if (normalize(np->v) == 0.0) { |
325 |
|
if (fabs(np->u_alpha - np->v_alpha) > 0.001) |
326 |
|
objerror(np->mp, WARNING, "illegal orientation vector"); |
327 |
< |
getperpendicular(np->u, np->pnorm, 1); /* punting */ |
327 |
> |
getperpendicular(np->u, np->pnorm, 0); /* punting */ |
328 |
|
fcross(np->v, np->pnorm, np->u); |
329 |
|
np->u_alpha = np->v_alpha = sqrt( 0.5 * |
330 |
|
(np->u_alpha*np->u_alpha + np->v_alpha*np->v_alpha) ); |
361 |
|
nstarget = 1; |
362 |
|
} |
363 |
|
scolorblack(scol); |
364 |
< |
dimlist[ndims++] = (int)(size_t)np->mp; |
364 |
> |
dimlist[ndims_inc] = (int)(size_t)np->mp; |
365 |
|
maxiter = MAXITER*nstarget; |
366 |
|
for (nstaken = ntrials = 0; (nstaken < nstarget) & |
367 |
|
(ntrials < maxiter); ntrials++) { |
409 |
|
scalescolor(scol, d); |
410 |
|
saddscolor(np->rp->rcol, scol); |
411 |
|
} |
412 |
< |
ndims--; |
412 |
> |
dec_ndims; |
413 |
|
} |
414 |
|
/* compute transmission */ |
415 |
|
copyscolor(sr.rcoef, np->mcolor); /* modify by material color */ |
428 |
|
} else |
429 |
|
nstarget = 1; |
430 |
|
} |
431 |
< |
dimlist[ndims++] = (int)(size_t)np->mp; |
431 |
> |
dimlist[ndims_inc] = (int)(size_t)np->mp; |
432 |
|
maxiter = MAXITER*nstarget; |
433 |
|
for (nstaken = ntrials = 0; (nstaken < nstarget) & |
434 |
|
(ntrials < maxiter); ntrials++) { |
464 |
|
saddscolor(np->rp->rcol, sr.rcol); |
465 |
|
++nstaken; |
466 |
|
} |
467 |
< |
ndims--; |
467 |
> |
dec_ndims; |
468 |
|
} |
469 |
|
} |