--- ray/src/rt/glass.c 1991/11/12 17:09:32 2.1 +++ ray/src/rt/glass.c 1993/08/24 12:59:24 2.6 @@ -27,11 +27,11 @@ static char SCCSid[] = "$SunId$ LBL"; * 3 red grn blu * * The color is used for the transmission at normal incidence. - * To compute transmission (tn) from transmissivity (Tn) use: + * To compute transmissivity (tn) from transmittance (Tn) use: * * tn = (sqrt(.8402528435+.0072522239*Tn*Tn)-.9166530661)/.0036261119/Tn * - * The transmission of standard 88% transmissivity glass is 0.96. + * The transmissivity of standard 88% transmittance glass is 0.96. * A refractive index other than the default can be used by giving * it as the fourth real argument. The above formula no longer applies. * @@ -46,7 +46,6 @@ m_glass(m, r) /* color a ray which hit a thin glass s OBJREC *m; register RAY *r; { - double sqrt(), pow(); COLOR mcolor; double pdot; FVECT pnorm; @@ -69,6 +68,7 @@ register RAY *r; if (r->rod < 0.0) /* reorient if necessary */ flipsurface(r); transtest = 0; + transdist = r->rot; /* get modifiers */ raytexture(r, m->omod); pdot = raynormal(pnorm, r); @@ -95,8 +95,12 @@ register RAY *r; if (!(r->crtype & SHADOW) && DOT(r->pert,r->pert) > FTINY*FTINY) { for (i = 0; i < 3; i++) /* perturb direction */ - p.rdir[i] = r->rdir[i] - r->pert[i]/rindex; - normalize(p.rdir); + p.rdir[i] = r->rdir[i] + + 2.*(1.-rindex)*r->pert[i]; + if (normalize(p.rdir) == 0.0) { + objerror(m, WARNING, "bad perturbation"); + VCOPY(p.rdir, r->rdir); + } } else { VCOPY(p.rdir, r->rdir); transtest = 2;