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.5 by greg, Tue Apr 11 13:30:33 1989 UTC vs.
Revision 1.9 by greg, Thu Aug 8 11:29:51 1991 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1986 Regents of the University of California */
1 > /* Copyright (c) 1990 Regents of the University of California */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
# Line 28 | Line 28 | static char SCCSid[] = "$SunId$ LBL";
28   *  from the original coordinates to the current coordinates.
29   */
30  
31 typedef struct {
32        struct {
33                double  sca;            /* scale factor */
34                double  xfm[4][4];      /* transformation matrix */
35        }  fore, back;
36 }  XFORM;
31  
38
32   t_func(m, r)                    /* compute texture for ray */
33   register OBJREC  *m;
34   register RAY  *r;
# Line 43 | Line 36 | register RAY  *r;
36          extern double  varvalue();
37          extern int  errno;
38          FVECT  disp;
39 <        register XFORM  *mxf;
39 >        double  d;
40 >        register FULLXF  *mxf;
41          register int  i;
42          register char  **sa;
43  
# Line 51 | Line 45 | register RAY  *r;
45                  objerror(m, USER, "bad # arguments");
46          sa = m->oargs.sarg;
47  
48 <        if ((mxf = (XFORM *)m->os) == NULL) {
49 <                mxf = (XFORM *)malloc(sizeof(XFORM));
48 >        if ((mxf = (FULLXF *)m->os) == NULL) {
49 >                mxf = (FULLXF *)malloc(sizeof(FULLXF));
50                  if (mxf == NULL)
51                          goto memerr;
52 <                mxf->fore.sca = 1.0;
59 <                setident4(mxf->fore.xfm);
60 <                if (xf(mxf->fore.xfm, &mxf->fore.sca,
61 <                        m->oargs.nsargs-4, sa+4) != m->oargs.nsargs-4)
52 >                if (fullxf(mxf, m->oargs.nsargs-4, sa+4) != m->oargs.nsargs-4)
53                          objerror(m, USER, "bad transform");
54 <                if (mxf->fore.sca < 0.0)
55 <                        mxf->fore.sca = -mxf->fore.sca;
56 <                mxf->back.sca = 1.0;
57 <                setident4(mxf->back.xfm);
67 <                invxf(mxf->back.xfm, &mxf->back.sca,
68 <                                m->oargs.nsargs-4, sa+4);
69 <                if (mxf->back.sca < 0.0)
70 <                        mxf->back.sca = -mxf->back.sca;
54 >                if (mxf->f.sca < 0.0)
55 >                        mxf->f.sca = -mxf->f.sca;
56 >                if (mxf->b.sca < 0.0)
57 >                        mxf->b.sca = -mxf->b.sca;
58                  m->os = (char *)mxf;
59          }
60  
61 <        setmap(m, r, mxf->back.xfm, mxf->back.sca);
61 >        setmap(m, r, &mxf->b);
62  
63 <        if (!vardefined(sa[0]))
77 <                loadfunc(sa[3]);
63 >        funcfile(sa[3]);
64          errno = 0;
65          for (i = 0; i < 3; i++)
66                  disp[i] = varvalue(sa[i]);
# Line 82 | Line 68 | register RAY  *r;
68                  objerror(m, WARNING, "compute error");
69                  return;
70          }
71 <        multv3(disp, disp, mxf->fore.xfm);
72 <        multv3(disp, disp, r->rofx);
71 >        multv3(disp, disp, mxf->f.xfm);
72 >        if (r->rox != NULL) {
73 >                multv3(disp, disp, r->rox->f.xfm);
74 >                d = 1.0 / (mxf->f.sca * r->rox->f.sca);
75 >        } else
76 >                d = 1.0 / mxf->f.sca;
77          for (i = 0; i < 3; i++)
78 <                r->pert[i] += disp[i] / (mxf->fore.sca * r->rofs);
78 >                r->pert[i] += disp[i] * d;
79          return;
80   memerr:
81          error(SYSTEM, "out of memory in t_func");

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines