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

Comparing ray/src/rt/t_func.c (file contents):
Revision 1.1 by greg, Thu Feb 2 10:41:46 1989 UTC vs.
Revision 1.6 by greg, Wed Apr 19 21:20:29 1989 UTC

# Line 40 | Line 40 | t_func(m, r)                   /* compute texture for ray */
40   register OBJREC  *m;
41   register RAY  *r;
42   {
43 #define  mxf    ((XFORM *)m->os)
43          extern double  varvalue();
44          extern int  errno;
45          FVECT  disp;
46 +        double  d;
47 +        register XFORM  *mxf;
48          register int  i;
49          register char  **sa;
50  
# Line 51 | Line 52 | register RAY  *r;
52                  objerror(m, USER, "bad # arguments");
53          sa = m->oargs.sarg;
54  
55 <        if (mxf == NULL) {
55 >        if ((mxf = (XFORM *)m->os) == NULL) {
56                  mxf = (XFORM *)malloc(sizeof(XFORM));
57                  if (mxf == NULL)
58                          goto memerr;
# Line 68 | Line 69 | register RAY  *r;
69                                  m->oargs.nsargs-4, sa+4);
70                  if (mxf->back.sca < 0.0)
71                          mxf->back.sca = -mxf->back.sca;
72 +                m->os = (char *)mxf;
73          }
74  
75 <        setmap(m, r, mxf->back.sca, mxf->back.xfm);
75 >        setmap(m, r, mxf->back.xfm, mxf->back.sca);
76  
77          if (!vardefined(sa[0]))
78                  loadfunc(sa[3]);
# Line 81 | Line 83 | register RAY  *r;
83                  objerror(m, WARNING, "compute error");
84                  return;
85          }
86 <        if (mxf->fore.xfm == NULL)
87 <                for (i = 0; i < 3; i++)
88 <                        r->pert[i] += disp[i];
89 <        else
90 <                for (i = 0; i < 3; i++)
89 <                        r->pert[i] += ( disp[0]*mxf->fore.xfm[0][i] +
90 <                                        disp[1]*mxf->fore.xfm[1][i] +
91 <                                        disp[2]*mxf->fore.xfm[2][i] )
92 <                                                / mxf->fore.sca;
86 >        multv3(disp, disp, mxf->fore.xfm);
87 >        multv3(disp, disp, r->rofx);
88 >        d = 1.0 / (mxf->fore.sca * r->rofs);
89 >        for (i = 0; i < 3; i++)
90 >                r->pert[i] += disp[i] * d;
91          return;
92   memerr:
93          error(SYSTEM, "out of memory in t_func");
96 #undef  mxf
94   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines