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.7 by greg, Thu Oct 5 07:23:20 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;
58                mxf->fore.sca = 1.0;
59                setident4(mxf->fore.xfm);
59                  if (xf(mxf->fore.xfm, &mxf->fore.sca,
60                          m->oargs.nsargs-4, sa+4) != m->oargs.nsargs-4)
61                          objerror(m, USER, "bad transform");
62                  if (mxf->fore.sca < 0.0)
63                          mxf->fore.sca = -mxf->fore.sca;
65                mxf->back.sca = 1.0;
66                setident4(mxf->back.xfm);
64                  invxf(mxf->back.xfm, &mxf->back.sca,
65                                  m->oargs.nsargs-4, sa+4);
66                  if (mxf->back.sca < 0.0)
67                          mxf->back.sca = -mxf->back.sca;
68 +                m->os = (char *)mxf;
69          }
70  
71 <        setmap(m, r, mxf->back.sca, mxf->back.xfm);
71 >        setmap(m, r, mxf->back.xfm, mxf->back.sca);
72  
73          if (!vardefined(sa[0]))
74                  loadfunc(sa[3]);
# Line 81 | Line 79 | register RAY  *r;
79                  objerror(m, WARNING, "compute error");
80                  return;
81          }
82 <        if (mxf->fore.xfm == NULL)
83 <                for (i = 0; i < 3; i++)
84 <                        r->pert[i] += disp[i];
85 <        else
86 <                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;
82 >        multv3(disp, disp, mxf->fore.xfm);
83 >        multv3(disp, disp, r->rofx);
84 >        d = 1.0 / (mxf->fore.sca * r->rofs);
85 >        for (i = 0; i < 3; i++)
86 >                r->pert[i] += disp[i] * d;
87          return;
88   memerr:
89          error(SYSTEM, "out of memory in t_func");
96 #undef  mxf
90   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines