--- ray/src/rt/normal.c 1992/05/14 11:32:07 2.17 +++ ray/src/rt/normal.c 1992/05/19 17:09:03 2.20 @@ -74,7 +74,6 @@ double omega; /* light source size */ double ldot; double dtmp, d2; FVECT vtmp; - register int i; COLOR ctmp; setcolor(cval, 0.0, 0.0, 0.0); @@ -106,8 +105,9 @@ double omega; /* light source size */ if (np->specfl & SP_FLAT) dtmp += omega/(4.0*PI); /* delta */ - for (i = 0; i < 3; i++) - vtmp[i] = ldir[i] - np->rp->rdir[i]; + vtmp[0] = ldir[0] - np->rp->rdir[0]; + vtmp[1] = ldir[1] - np->rp->rdir[1]; + vtmp[2] = ldir[2] - np->rp->rdir[2]; d2 = DOT(vtmp, np->pnorm); d2 = 2.0 - 2.0*d2/sqrt(DOT(vtmp,vtmp)); /* gaussian */ @@ -135,13 +135,13 @@ double omega; /* light source size */ * is always modified by material color. */ /* roughness + source */ - dtmp = np->alpha2/2.0 + omega/(2.0*PI); + dtmp = np->alpha2 + omega/PI; /* gaussian */ - dtmp = exp((DOT(np->prdir,ldir)-1.)/dtmp)/(2.*PI)/dtmp; + dtmp = exp((2.*DOT(np->prdir,ldir)-2.)/dtmp)/(4.*PI*dtmp); /* worth using? */ if (dtmp > FTINY) { copycolor(ctmp, np->mcolor); - dtmp *= np->tspec * omega * sqrt(ldot/np->pdot); + dtmp *= np->tspec * omega * sqrt(-ldot/np->pdot); scalecolor(ctmp, dtmp); addcolor(cval, ctmp); } @@ -240,8 +240,7 @@ register RAY *r; transtest = 2; } else { for (i = 0; i < 3; i++) /* perturb */ - nd.prdir[i] = r->rdir[i] - - 0.5*r->pert[i]; + nd.prdir[i] = r->rdir[i] - r->pert[i]; if (DOT(nd.prdir, r->ron) < -FTINY) normalize(nd.prdir); /* OK */ else @@ -370,7 +369,7 @@ register NORMDAT *np; if (rv[1] <= FTINY) d = 1.0; else - d = sqrt( np->alpha2/4.0 * -log(rv[1]) ); + d = sqrt( -log(rv[1]) * np->alpha2 ); for (i = 0; i < 3; i++) sr.rdir[i] = np->prdir[i] + d*(cosp*u[i] + sinp*v[i]); if (DOT(sr.rdir, r->ron) < -FTINY)