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.2 by greg, Wed Dec 12 22:35:07 1990 UTC vs.
Revision 1.4 by greg, Sat Dec 15 15:03:44 1990 UTC

# Line 24 | Line 24 | static char SCCSid[] = "$SunId$ LBL";
24   *  surface can be used to represent an infinitely thin object.
25   *
26   *  Arguments for MAT_PFUNC and MAT_MFUNC are:
27 < *      2+      func    funcfile        transform ..
27 > *      2+      func    funcfile        transform
28   *      0
29 < *      4+      red     grn     blu     specularity     args ..
29 > *      4+      red     grn     blu     specularity     A5 ..
30   *
31   *  Arguments for MAT_PDATA and MAT_MDATA are:
32 < *      4+      func    datafile        funcfile        v0 ..   transform ..
32 > *      4+      func    datafile        funcfile        v0 ..   transform
33   *      0
34 < *      4+      red     grn     blu     specularity     args ..
34 > *      4+      red     grn     blu     specularity     A5 ..
35   */
36  
37   extern double   funvalue(), varvalue();
38  
39 #define  BSPEC(m)               (6.0)           /* specular parameter b */
40
39   typedef struct {
40          OBJREC  *mp;            /* material pointer */
41          RAY  *pr;               /* intersected ray */
# Line 57 | Line 55 | register BRDFDAT  *np;         /* material data */
55   FVECT  ldir;                    /* light source direction */
56   double  omega;                  /* light source size */
57   {
58 +        extern XF  funcxf;
59          double  ldot;
60          double  dtmp;
61          COLOR  ctmp;
62 +        FVECT  ldx;
63          double  pt[MAXDIM];
64          register int    i;
65  
# Line 86 | Line 86 | double  omega;                 /* light source size */
86                   *  Compute specular component.
87                   */
88                  setfunc(np->mp, np->pr);
89 +                                                /* transform light vector */
90 +                multv3(ldx, ldir, funcxf.xfm);
91 +                for (i = 0; i < 3; i++)
92 +                        ldx[i] /= funcxf.sca;
93 +                                                /* evaluate BRDF */
94                  errno = 0;
95                  if (np->dp == NULL)
96 <                        dtmp = funvalue(np->mp->oargs.sarg[0], 3, ldir);
96 >                        dtmp = funvalue(np->mp->oargs.sarg[0], 3, ldx);
97                  else {
98                          for (i = 0; i < np->dp->nd; i++)
99                                  pt[i] = funvalue(np->mp->oargs.sarg[3+i],
100 <                                                3, ldir);
100 >                                                3, ldx);
101                          dtmp = datavalue(np->dp, pt);
102                          dtmp = funvalue(np->mp->oargs.sarg[0], 1, &dtmp);
103                  }
# Line 117 | Line 122 | register OBJREC  *m;
122   register RAY  *r;
123   {
124          BRDFDAT  nd;
120        double  dtmp;
125          COLOR  ctmp;
126          register int  i;
127  
# Line 165 | Line 169 | register RAY  *r;
169                  else
170                          setcolor(nd.scolor, 1.0, 1.0, 1.0);
171                  scalecolor(nd.scolor, nd.rspec);
168                                                /* improved model */
169                dtmp = exp(-BSPEC(m)*nd.pdot);
170                for (i = 0; i < 3; i++)
171                        colval(nd.scolor,i) += (1.0-colval(nd.scolor,i))*dtmp;
172                nd.rspec += (1.0-nd.rspec)*dtmp;
172          }
173                                                  /* diffuse reflection */
174          nd.rdiff = 1.0 - nd.rspec;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines