156 |
|
/* roughness + source */ |
157 |
|
dtmp = np->alpha2 + omega*(1.0/PI); |
158 |
|
/* gaussian */ |
159 |
< |
dtmp = exp((2.*DOT(np->prdir,ldir)-2.)/dtmp) / |
160 |
< |
(PI*np->pdot*dtmp); |
159 |
> |
dtmp = exp((2.*DOT(np->prdir,ldir)-2.)/dtmp)/(PI*dtmp); |
160 |
|
/* worth using? */ |
161 |
|
if (dtmp > FTINY) { |
162 |
|
copycolor(ctmp, np->mcolor); |
163 |
< |
dtmp *= np->tspec * omega; |
163 |
> |
dtmp *= np->tspec * omega * sqrt(-ldot/np->pdot); |
164 |
|
scalecolor(ctmp, dtmp); |
165 |
|
addcolor(cval, ctmp); |
166 |
|
} |
299 |
|
if (hastexture && DOT(nd.vrefl, r->ron) <= FTINY) |
300 |
|
for (i = 0; i < 3; i++) /* safety measure */ |
301 |
|
nd.vrefl[i] = r->rdir[i] + 2.*r->rod*r->ron[i]; |
302 |
+ |
checknorm(nd.vrefl); |
303 |
|
} |
304 |
|
/* reflected ray */ |
305 |
|
if ((nd.specfl&(SP_REFL|SP_PURE|SP_RBLT)) == (SP_REFL|SP_PURE)) { |