ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/m_brdf.c
(Generate patch)

Comparing ray/src/rt/m_brdf.c (file contents):
Revision 1.5 by greg, Tue May 7 17:19:52 1991 UTC vs.
Revision 1.6 by greg, Tue May 7 17:45:47 1991 UTC

# Line 66 | Line 66 | typedef struct {
66          RAY  *pr;               /* intersected ray */
67          DATARRAY  *dp;          /* data array for PDATA, MDATA or TDATA */
68          COLOR  mcolor;          /* color of this material */
69        COLOR  scolor;          /* color of specular reflection */
69          double  rspec;          /* specular reflection */
70          double  rdiff;          /* diffuse reflection */
71          double  trans;          /* transmissivity */
# Line 162 | Line 161 | double  omega;                 /* light source size */
161                  /*
162                   *  Compute reflected non-diffuse component.
163                   */
164 <                multcolor(ctmp, np->scolor);
165 <                dtmp = ldot * omega;
164 >                if (np->mp->otype == MAT_MFUNC || np->mp->otype == MAT_MDATA)
165 >                        multcolor(ctmp, np->mcolor);
166 >                dtmp = ldot * omega * np->rspec;
167                  scalecolor(ctmp, dtmp);
168                  addcolor(cval, ctmp);
169          } else {
170                  /*
171                   *  Compute transmitted non-diffuse component.
172                   */
173 +                if (np->mp->otype == MAT_TFUNC || np->mp->otype == MAT_TDATA)
174 +                        multcolor(ctmp, np->mcolor);
175                  dtmp = -ldot * omega * np->tspec;
176                  scalecolor(ctmp, dtmp);
177                  addcolor(cval, ctmp);
# Line 287 | Line 289 | register RAY  *r;
289          }
290          if (r->crtype & SHADOW)                 /* the rest is shadow */
291                  return;
290        if (nd.rspec > FTINY) {                 /* has specular component */
291                                                /* compute specular color */
292                if (m->otype == MAT_MFUNC || m->otype == MAT_MDATA)
293                        copycolor(nd.scolor, nd.mcolor);
294                else
295                        setcolor(nd.scolor, 1.0, 1.0, 1.0);
296                scalecolor(nd.scolor, nd.rspec);
292                                                  /* compute reflected ray */
293 <                if (m->otype == MAT_BRTDF) {
294 <                        RAY  sr;
295 <                        errno = 0;
296 <                        setcolor(ctmp, varvalue(m->oargs.sarg[3]),
297 <                                        varvalue(m->oargs.sarg[4]),
298 <                                        varvalue(m->oargs.sarg[5]));
299 <                        scalecolor(ctmp, nd.rspec);
300 <                        if (errno)
301 <                                objerror(m, WARNING, "compute error");
302 <                        else if ((dtmp = bright(ctmp)) > FTINY &&
293 >        if (m->otype == MAT_BRTDF && nd.rspec > FTINY) {
294 >                RAY  sr;
295 >                errno = 0;
296 >                setcolor(ctmp, varvalue(m->oargs.sarg[3]),
297 >                                varvalue(m->oargs.sarg[4]),
298 >                                varvalue(m->oargs.sarg[5]));
299 >                scalecolor(ctmp, nd.rspec);
300 >                if (errno)
301 >                        objerror(m, WARNING, "compute error");
302 >                else if ((dtmp = bright(ctmp)) > FTINY &&
303                                  rayorigin(&sr, r, REFLECTED, dtmp) == 0) {
304 <                                for (i = 0; i < 3; i++)
305 <                                        sr.rdir[i] = r->rdir[i] +
304 >                        for (i = 0; i < 3; i++)
305 >                                sr.rdir[i] = r->rdir[i] +
306                                                  2.0*nd.pdot*nd.pnorm[i];
307 <                                rayvalue(&sr);
308 <                                multcolor(sr.rcol, ctmp);
309 <                                addcolor(r->rcol, sr.rcol);
315 <                        }
307 >                        rayvalue(&sr);
308 >                        multcolor(sr.rcol, ctmp);
309 >                        addcolor(r->rcol, sr.rcol);
310                  }
311          }
312                                                  /* compute ambient */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines