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

Comparing ray/src/rt/m_mist.c (file contents):
Revision 2.5 by greg, Thu Mar 21 10:24:59 1996 UTC vs.
Revision 2.12 by greg, Mon Mar 10 17:26:26 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1995 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char RCSid[] = "$Id";
3   #endif
6
4   /*
5   * Mist volumetric material.
6   */
7  
8 + #include "copyright.h"
9 +
10   #include  "ray.h"
11  
12   #include  "source.h"
# Line 33 | Line 32 | static char SCCSid[] = "$SunId$ LBL";
32   *
33   *  Up to five real arguments may be given for MAT_MIST:
34   *
35 < *      [ext_r  ext_g  ext_b  [albedo [gecc]]]
35 > *      [ext_r  ext_g  ext_b  [albedo_r albedo_g albedo_b [gecc]]]
36   *
37   *  The primaries indicate medium extinction per unit length (absorption
38   *  plus scattering), which is added to the global extinction coefficient, set
# Line 44 | Line 43 | static char SCCSid[] = "$SunId$ LBL";
43   *  scattering.  A value approaching 1 indicates strong forward scattering.
44   */
45  
46 + #ifndef  MAXSLIST
47 + #define  MAXSLIST       32      /* maximum sources to check */
48 + #endif
49 +
50   #define RELAYDELIM      '>'             /* relay delimiter character */
51  
49 extern COLOR  cextinction;              /* global coefficient of extinction */
50 extern double  salbedo;                 /* global scattering albedo */
51 extern double  seccg;                   /* global scattering eccentricity */
52  
53
53   static int
54   inslist(sl, n)          /* return index of source n if it's in list sl */
55   register int  *sl;
# Line 70 | Line 69 | srcmatch(sp, id)       /* check for an id match on a light s
69   register SRCREC  *sp;
70   register char  *id;
71   {
73        extern char  *index();
72          register char  *cp;
73                                                  /* check for relay sources */
74          while ((cp = index(id, RELAYDELIM)) != NULL) {
# Line 87 | Line 85 | register char  *id;
85   }
86  
87  
88 < static
88 > static void
89   add2slist(r, sl)        /* add source list to ray's */
90   register RAY  *r;
91   register int  *sl;
# Line 102 | Line 100 | register int  *sl;
100          for (i = sl[0]; i > 0; i--)
101                  if (!inslist(r->slights, sl[i])) {
102                          if (r->slights[0] >= MAXSLIST)
103 <                                error(USER, "scattering source list overflow");
103 >                                error(INTERNAL,
104 >                                        "scattering source list overflow");
105                          r->slights[++r->slights[0]] = sl[i];
106                  }
107   }
108  
109  
110 + int
111   m_mist(m, r)            /* process a ray entering or leaving some mist */
112   OBJREC  *m;
113   register RAY  *r;
# Line 119 | Line 119 | register RAY  *r;
119          double  re, ge, be;
120          register int  i, j;
121                                          /* check arguments */
122 <        if (m->oargs.nfargs > 5)
122 >        if (m->oargs.nfargs > 7)
123                  objerror(m, USER, "bad arguments");
124                                          /* get source indices */
125          if (m->oargs.nsargs > 0 && (myslist = (int *)m->os) == NULL) {
126                  if (m->oargs.nsargs > MAXSLIST)
127 <                        objerror(m, USER, "too many sources in list");
127 >                        objerror(m, INTERNAL, "too many sources in list");
128                  myslist = (int *)malloc((m->oargs.nsargs+1)*sizeof(int));
129                  if (myslist == NULL)
130                          goto memerr;
# Line 166 | Line 166 | register RAY  *r;
166                  p.slights[0] = 0;
167          if (r->rod > 0.) {                      /* entering ray */
168                  addcolor(p.cext, mext);
169 <                if (m->oargs.nfargs > 3)
170 <                        p.albedo = m->oargs.farg[3];
171 <                if (m->oargs.nfargs > 4)
172 <                        p.gecc = m->oargs.farg[4];
169 >                if (m->oargs.nfargs > 5)
170 >                        setcolor(p.albedo, m->oargs.farg[3],
171 >                                        m->oargs.farg[4], m->oargs.farg[5]);
172 >                if (m->oargs.nfargs > 6)
173 >                        p.gecc = m->oargs.farg[6];
174                  add2slist(&p, myslist);                 /* add to list */
175          } else {                                /* leaving ray */
176                  if (myslist != NULL) {                  /* delete from list */
# Line 181 | Line 182 | register RAY  *r;
182                                          p.slights[++i] = p.slights[j];
183                          if (p.slights[0] - i < myslist[0]) {    /* fix old */
184                                  addcolor(r->cext, mext);
185 <                                if (m->oargs.nfargs > 3)
186 <                                        r->albedo = m->oargs.farg[3];
187 <                                if (m->oargs.nfargs > 4)
188 <                                        r->gecc = m->oargs.farg[4];
185 >                                if (m->oargs.nfargs > 5)
186 >                                        setcolor(r->albedo, m->oargs.farg[3],
187 >                                        m->oargs.farg[4], m->oargs.farg[5]);
188 >                                if (m->oargs.nfargs > 6)
189 >                                        r->gecc = m->oargs.farg[6];
190                                  add2slist(r, myslist);
191                          }
192                          p.slights[0] = i;
# Line 199 | Line 201 | register RAY  *r;
201                                  colval(cextinction,BLU))
202                          be = colval(cextinction,BLU);
203                  setcolor(p.cext, re, ge, be);
204 <                if (m->oargs.nfargs > 3)
205 <                        p.albedo = salbedo;
206 <                if (m->oargs.nfargs > 4)
204 >                if (m->oargs.nfargs > 5)
205 >                        copycolor(p.albedo, salbedo);
206 >                if (m->oargs.nfargs > 6)
207                          p.gecc = seccg;
208          }
209          rayvalue(&p);                           /* calls rayparticipate() */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines