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

Comparing ray/src/rt/func.c (file contents):
Revision 1.3 by greg, Tue Mar 14 10:41:21 1989 UTC vs.
Revision 1.10 by greg, Sat Aug 4 11:47:46 1990 UTC

# Line 38 | Line 38 | double  sca;
38  
39          if (initfile != NULL) {
40                  loadfunc(initfile);
41 <                scompile(NULL, "Dx=$1;Dy=$2;Dz=$3;");
42 <                scompile(NULL, "Nx=$4;Ny=$5;Nz=$6;");
43 <                scompile(NULL, "Px=$7;Py=$8;Pz=$9;");
44 <                scompile(NULL, "T=$10;Rdot=$11;");
41 >                scompile("Dx=$1;Dy=$2;Dz=$3;", NULL, 0);
42 >                scompile("Nx=$4;Ny=$5;Nz=$6;", NULL, 0);
43 >                scompile("Px=$7;Py=$8;Pz=$9;", NULL, 0);
44 >                scompile("T=$10;Rdot=$11;", NULL, 0);
45 >                scompile("S=$12;Tx=$13;Ty=$14;Tz=$15;", NULL, 0);
46 >                scompile("Ix=$16;Iy=$17;Iz=$18;", NULL, 0);
47 >                scompile("Jx=$19;Jy=$20;Jz=$21;", NULL, 0);
48 >                scompile("Kx=$22;Ky=$23;Kz=$24;", NULL, 0);
49                  funset("arg", 1, l_arg);
50                  funset("noise3", 3, l_noise3);
51                  funset("noise3a", 3, l_noise3a);
# Line 53 | Line 57 | double  sca;
57          }
58          fobj = m;
59          fray = r;
60 <        fxf.sca = r->ros * sca;
61 <        multmat4(fxf.xfm, r->rox, xfm);
60 >        fxf.sca = r->robs * sca;
61 >        multmat4(fxf.xfm, r->robx, xfm);
62          eclock++;               /* notify expression evaluator */
63   }
64  
# Line 66 | Line 70 | RAY  *r;
70          register XF  *mxf;
71  
72          if ((mxf = (XF *)m->os) == NULL) {
73 <                register int  n = m->oargs.nsargs;
74 <                register char  **sa = m->oargs.sarg;
73 >                register int  n;
74 >                register char  **sa;
75  
76 <                while (n > 0 && **sa != '-') {
77 <                        n--;
78 <                        sa++;
75 <                }
76 >                for (n = m->oargs.nsargs, sa = m->oargs.sarg;
77 >                                n > 0 && **sa != '-'; n--, sa++)
78 >                        ;
79                  mxf = (XF *)malloc(sizeof(XF));
80                  if (mxf == NULL)
81                          goto memerr;
79                mxf->sca = 1.0;
80                setident4(mxf->xfm);
82                  if (invxf(mxf->xfm, &mxf->sca, n, sa) != n)
83                          objerror(m, USER, "bad transform");
84                  if (mxf->sca < 0.0)
# Line 98 | Line 99 | char  *fname;
99          extern char  *libpath;          /* library search path */
100          char  *ffname;
101  
102 <        if ((ffname = getpath(fname, libpath)) == NULL) {
102 >        if ((ffname = getpath(fname, libpath, R_OK)) == NULL) {
103                  sprintf(errmsg, "cannot find function file \"%s\"", fname);
104                  error(USER, errmsg);
105          }
# Line 129 | Line 130 | double
130   chanvalue(n)                    /* return channel n to calcomp */
131   register int  n;
132   {
133 <        double  res;
133 >        double  sum;
134          register RAY  *r;
135  
136 <        n--;                                    /* for convenience */
136 >        if (--n < 0)
137 >                goto badchan;
138  
139 <        if (n < 0 || n > 10)
138 <                error(USER, "illegal channel number");
139 >        if (n < 3)                      /* ray direction */
140  
141 <        if (n == 9) {                           /* distance */
141 >                return( (       fray->rdir[0]*fxf.xfm[0][n] +
142 >                                fray->rdir[1]*fxf.xfm[1][n] +
143 >                                fray->rdir[2]*fxf.xfm[2][n]     )
144 >                         / fxf.sca );
145  
146 <                res = fray->rot;
143 <                for (r = fray->parent; r != NULL; r = r->parent)
144 <                        res += r->rot;
145 <                res *= fxf.sca;
146 >        if (n < 6)                      /* surface normal */
147  
148 <        } else if (n == 10) {                   /* dot product */
148 >                return( (       fray->ron[0]*fxf.xfm[0][n-3] +
149 >                                fray->ron[1]*fxf.xfm[1][n-3] +
150 >                                fray->ron[2]*fxf.xfm[2][n-3]    )
151 >                         / fxf.sca );
152  
153 <                res = fray->rod;
153 >        if (n < 9)                      /* intersection */
154  
155 <        } else if (n < 3) {                     /* ray direction */
156 <                        res = ( fray->rdir[0]*fxf.xfm[0][n] +
157 <                                        fray->rdir[1]*fxf.xfm[1][n] +
158 <                                        fray->rdir[2]*fxf.xfm[2][n]     )
159 <                                 / fxf.sca ;
160 <        } else if (n < 6) {                     /* surface normal */
161 <                        res = ( fray->ron[0]*fxf.xfm[0][n-3] +
162 <                                        fray->ron[1]*fxf.xfm[1][n-3] +
163 <                                        fray->ron[2]*fxf.xfm[2][n-3]    )
164 <                                 / fxf.sca ;
165 <        } else {                                /* intersection */
166 <                        res =   fray->rop[0]*fxf.xfm[0][n-6] +
163 <                                        fray->rop[1]*fxf.xfm[1][n-6] +
164 <                                        fray->rop[2]*fxf.xfm[2][n-6] +
165 <                                                     fxf.xfm[3][n-6] ;
155 >                return( fray->rop[0]*fxf.xfm[0][n-6] +
156 >                                fray->rop[1]*fxf.xfm[1][n-6] +
157 >                                fray->rop[2]*fxf.xfm[2][n-6] +
158 >                                             fxf.xfm[3][n-6] );
159 >
160 >        if (n == 9) {                   /* distance */
161 >
162 >                sum = fray->rot;
163 >                for (r = fray->parent; r != NULL; r = r->parent)
164 >                        sum += r->rot;
165 >                return(sum * fxf.sca);
166 >
167          }
168 +        if (n == 10)                    /* dot product */
169 +                return(fray->rod);
170  
171 <        return(res);
171 >        if (n == 11)                    /* scale */
172 >                return(fxf.sca);
173 >
174 >        if (n < 15)                     /* origin */
175 >                return(fxf.xfm[3][n-12]);
176 >
177 >        if (n < 18)                     /* i unit vector */
178 >                return(fxf.xfm[0][n-15] / fxf.sca);
179 >
180 >        if (n < 21)                     /* j unit vector */
181 >                return(fxf.xfm[1][n-15] / fxf.sca);
182 >
183 >        if (n < 24)                     /* k unit vector */
184 >                return(fxf.xfm[2][n-21] / fxf.sca);
185 > badchan:
186 >        error(USER, "illegal channel number");
187   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines