--- ray/src/rt/m_brdf.c 1991/11/25 09:51:03 2.2 +++ ray/src/rt/m_brdf.c 1992/10/14 12:30:54 2.4 @@ -85,7 +85,7 @@ double omega; /* light source size */ double dtmp; COLOR ctmp; FVECT ldx; - double pt[MAXDIM]; + double lddx[3], pt[MAXDIM]; register char **sa; register int i; @@ -127,27 +127,27 @@ double omega; /* light source size */ /* transform light vector */ multv3(ldx, ldir, funcxf.xfm); for (i = 0; i < 3; i++) - ldx[i] /= funcxf.sca; + lddx[i] = ldx[i]/funcxf.sca; /* compute BRTDF */ if (np->mp->otype == MAT_BRTDF) { - colval(ctmp,RED) = funvalue(sa[6], 3, ldx); + colval(ctmp,RED) = funvalue(sa[6], 3, lddx); if (!strcmp(sa[7],sa[6])) colval(ctmp,GRN) = colval(ctmp,RED); else - colval(ctmp,GRN) = funvalue(sa[7], 3, ldx); + colval(ctmp,GRN) = funvalue(sa[7], 3, lddx); if (!strcmp(sa[8],sa[6])) colval(ctmp,BLU) = colval(ctmp,RED); else if (!strcmp(sa[8],sa[7])) colval(ctmp,BLU) = colval(ctmp,GRN); else - colval(ctmp,BLU) = funvalue(sa[8], 3, ldx); + colval(ctmp,BLU) = funvalue(sa[8], 3, lddx); dtmp = bright(ctmp); } else if (np->dp == NULL) { - dtmp = funvalue(sa[0], 3, ldx); + dtmp = funvalue(sa[0], 3, lddx); setcolor(ctmp, dtmp, dtmp, dtmp); } else { for (i = 0; i < np->dp->nd; i++) - pt[i] = funvalue(sa[3+i], 3, ldx); + pt[i] = funvalue(sa[3+i], 3, lddx); dtmp = datavalue(np->dp, pt); dtmp = funvalue(sa[0], 1, &dtmp); setcolor(ctmp, dtmp, dtmp, dtmp); @@ -267,7 +267,10 @@ register RAY *r; for (i = 0; i < 3; i++) /* perturb direction */ sr.rdir[i] = r->rdir[i] - .75*r->pert[i]; - normalize(sr.rdir); + if (normalize(sr.rdir) == 0.0) { + objerror(m, WARNING, "illegal perturbation"); + VCOPY(sr.rdir, r->rdir); + } } else { VCOPY(sr.rdir, r->rdir); transtest = 2;