--- ray/src/rt/m_brdf.c 1993/08/12 17:50:40 2.7 +++ ray/src/rt/m_brdf.c 1994/12/21 09:51:46 2.11 @@ -16,6 +16,8 @@ static char SCCSid[] = "$SunId$ LBL"; #include "func.h" +extern int backvis; /* back faces visible? */ + /* * Arguments to this material include the color and specularity. * String arguments include the reflection function and files. @@ -197,7 +199,6 @@ register RAY *r; double transtest, transdist; int hasrefl, hastrans; COLOR ctmp; - double dtmp; register MFUNC *mf; register int i; /* check arguments */ @@ -242,6 +243,7 @@ register RAY *r; /* compute transmitted ray */ setbrdfunc(&nd); transtest = 0; + transdist = r->rot; errno = 0; setcolor(ctmp, evalue(mf->ep[3]), evalue(mf->ep[4]), @@ -268,7 +270,7 @@ register RAY *r; transdist = r->rot + sr.rt; } if (r->crtype & SHADOW) /* the rest is shadow */ - return; + return(1); /* compute reflected ray */ setbrdfunc(&nd); errno = 0; @@ -308,6 +310,8 @@ register RAY *r; /* check distance */ if (transtest > bright(r->rcol)) r->rt = transdist; + + return(1); } @@ -321,7 +325,7 @@ register RAY *r; double dtmp; /* always a shadow */ if (r->crtype & SHADOW) - return; + return(1); /* check arguments */ if (m->oargs.nsargs < (hasdata(m->otype)?4:2) | m->oargs.nfargs < (m->otype==MAT_TFUNC|m->otype==MAT_TDATA?6:4)) @@ -347,9 +351,15 @@ register RAY *r; /* compute reflectance */ dtmp = 1.0 - nd.trans - nd.rspec; setcolor(nd.rdiff, dtmp, dtmp, dtmp); - /* fix orientation */ - if (r->rod < 0.0) - flipsurface(r); + /* check for back side */ + if (r->rod < 0.0) { + if (!backvis && m->otype != MAT_TFUNC + && m->otype != MAT_TDATA) { + raytrans(r); + return(1); + } + flipsurface(r); /* reorient if backvis */ + } /* get modifiers */ raytexture(r, m->omod); nd.pdot = raynormal(nd.pnorm, r); /* perturb normal */ @@ -381,6 +391,8 @@ register RAY *r; } /* add direct component */ direct(r, dirbrdf, &nd); + + return(1); }