--- ray/src/rt/dielectric.c 1989/02/02 10:41:21 1.1 +++ ray/src/rt/dielectric.c 1991/11/12 17:09:55 2.1 @@ -66,6 +66,8 @@ register RAY *r; if (m->oargs.nfargs != (m->otype==MAT_DIELECTRIC ? 5 : 8)) objerror(m, USER, "bad arguments"); + r->rt = r->rot; /* just use ray length */ + raytexture(r, m->omod); /* get modifiers */ cos1 = raynormal(dnorm, r); /* cosine of theta1 */ @@ -92,7 +94,7 @@ register RAY *r; else setcolor(mcolor, 1.0, 1.0, 1.0); } - mabsorp = intens(mcolor); + mabsorp = bright(mcolor); d2 = 1.0 - nratio*nratio*(1.0 - cos1*cos1); /* compute cos theta2 */ @@ -127,6 +129,7 @@ register RAY *r; if (m->otype != MAT_DIELECTRIC || r->rod > 0.0 || r->crtype & SHADOW + || directinvis || m->oargs.farg[4] == 0.0 || !disperse(m, r, p.rdir, trans)) #endif @@ -170,8 +173,8 @@ double tr; FVECT v1, v2, n1, n2; FVECT dv, v2Xdv; double v2Xdvv2Xdv; - int sn, success = 0; - double omega; + int success = 0; + SRCINDEX si; FVECT vtmp1, vtmp2; double dtmp1, dtmp2; int l1, l2; @@ -233,12 +236,11 @@ double tr; v2Xdvv2Xdv = DOT(v2Xdv, v2Xdv); /* check sources */ - for (sn = 0; sn < nsources; sn++) { + initsrcindex(&si); + while (srcray(&sray, r, &si)) { - if ((omega = srcray(&sray, r, sn)) == 0.0 || - DOT(sray.rdir, v2) < MINCOS) + if (DOT(sray.rdir, v2) < MINCOS) continue; /* bad source */ - /* adjust source ray */ dtmp1 = DOT(v2Xdv, sray.rdir) / v2Xdvv2Xdv; @@ -253,7 +255,7 @@ double tr; /* trace source ray */ normalize(sray.rdir); rayvalue(&sray); - if (intens(sray.rcol) <= FTINY) /* missed it */ + if (bright(sray.rcol) <= FTINY) /* missed it */ continue; /* @@ -263,7 +265,7 @@ double tr; */ fcross(vtmp1, v2Xdv, sray.rdir); - dtmp1 = sqrt(omega / v2Xdvv2Xdv / PI); + dtmp1 = sqrt(si.dom / v2Xdvv2Xdv / PI); /* compute first ray */ for (i = 0; i < 3; i++)