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 */ |