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

Comparing ray/src/rt/rtrace.c (file contents):
Revision 2.19 by greg, Mon Aug 21 10:29:20 1995 UTC vs.
Revision 2.25 by gregl, Fri Oct 17 10:14:37 1997 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1994 Regents of the University of California */
1 > /* Copyright (c) 1997 Silicon Graphics, Inc. */
2  
3   #ifndef lint
4 < static char SCCSid[] = "$SunId$ LBL";
4 > static char SCCSid[] = "$SunId$ SGI";
5   #endif
6  
7   /*
# Line 37 | Line 37 | int  ndims = 0;                                /* number of sampling dimensions */
37   int  samplendx = 0;                     /* index for this sample */
38  
39   int  imm_irrad = 0;                     /* compute immediate irradiance? */
40 + int  lim_dist = 0;                      /* limit distance? */
41  
42   int  inform = 'a';                      /* input format */
43   int  outform = 'a';                     /* output format */
# Line 58 | Line 59 | int  vspretest = 512;                  /* virtual source pretest dens
59   int  directvis = 1;                     /* sources visible? */
60   double  srcsizerat = .2;                /* maximum ratio source size/dist. */
61  
62 + COLOR  cextinction = BLKCOLOR;          /* global extinction coefficient */
63 + COLOR  salbedo = BLKCOLOR;              /* global scattering albedo */
64 + double  seccg = 0.;                     /* global scattering eccentricity */
65 + double  ssampdist = 0.;                 /* scatter sampling distance */
66 +
67   double  specthresh = .15;               /* specular sampling threshold */
68   double  specjitter = 1.;                /* specular sampling jitter */
69  
# Line 67 | Line 73 | int  maxdepth = 6;                     /* maximum recursion depth */
73   double  minweight = 4e-3;               /* minimum ray weight */
74  
75   COLOR  ambval = BLKCOLOR;               /* ambient value */
76 + int  ambvwt = 0;                        /* initial weight for ambient value */
77   double  ambacc = 0.2;                   /* ambient accuracy */
78   int  ambres = 128;                      /* ambient resolution */
79   int  ambdiv = 512;                      /* ambient divisions */
# Line 76 | Line 83 | char  *amblist[128];                   /* ambient include/exclude list
83   int  ambincl = -1;                      /* include == 1, exclude == 0 */
84  
85   extern OBJREC  Lamb;                    /* a Lambertian surface */
86 + extern OBJREC  Aftplane;                /* aft clipping object */
87  
88 +
89   static RAY  thisray;                    /* for our convenience */
90  
91   static int  oputo(), oputd(), oputv(), oputl(), oputL(),
# Line 122 | Line 131 | char  *fname;
131          long  vcount = hresolu>1 ? hresolu*vresolu : vresolu;
132          long  nextflush = hresolu;
133          FILE  *fp;
134 +        double  d;
135          FVECT  orig, direc;
136                                          /* set up input */
137          if (fname == NULL)
# Line 156 | Line 166 | char  *fname;
166          while (getvec(orig, inform, fp) == 0 &&
167                          getvec(direc, inform, fp) == 0) {
168  
169 <                if (normalize(direc) == 0.0) {          /* zero ==> flush */
170 <                        fflush(stdout);
171 <                        continue;
172 <                }
173 <                samplendx++;
169 >                d = normalize(direc);
170 >                if (d == 0.0) {                         /* zero ==> flush */
171 >                        bogusray();
172 >                        if (--nextflush <= 0) {
173 >                                fflush(stdout);
174 >                                nextflush = hresolu;
175 >                        }
176 >                } else {
177 >                        samplendx++;
178                                                          /* compute and print */
179 <                if (imm_irrad)
180 <                        irrad(orig, direc);
181 <                else
182 <                        rad(orig, direc);
179 >                        if (imm_irrad)
180 >                                irrad(orig, direc);
181 >                        else
182 >                                rad(orig, direc, lim_dist ? d : 0.0);
183                                                          /* flush if time */
184 <                if (--nextflush == 0) {
185 <                        fflush(stdout);
186 <                        nextflush = hresolu;
184 >                        if (--nextflush == 0) {
185 >                                fflush(stdout);
186 >                                nextflush = hresolu;
187 >                        }
188                  }
189                  if (ferror(stdout))
190                          error(SYSTEM, "write error");
# Line 240 | Line 255 | register char  *vs;
255   }
256  
257  
258 < rad(org, dir)                   /* compute and print ray value(s) */
258 > bogusray()                      /* print out empty record */
259 > {
260 >        thisray.rorg[0] = thisray.rorg[1] = thisray.rorg[2] =
261 >        thisray.rdir[0] = thisray.rdir[1] = thisray.rdir[2] = 0.0;
262 >        rayorigin(&thisray, NULL, PRIMARY, 1.0);
263 >        printvals(&thisray);
264 > }
265 >
266 >
267 > rad(org, dir, dmax)             /* compute and print ray value(s) */
268   FVECT  org, dir;
269 + double  dmax;
270   {
271          VCOPY(thisray.rorg, org);
272          VCOPY(thisray.rdir, dir);
273 <        thisray.rmax = 0.0;
273 >        thisray.rmax = dmax;
274          rayorigin(&thisray, NULL, PRIMARY, 1.0);
275 <        if (castonly)
276 <                localhit(&thisray, &thescene) || sourcehit(&thisray);
277 <        else
275 >        if (castonly) {
276 >                if (!localhit(&thisray, &thescene))
277 >                        if (thisray.ro == &Aftplane) {  /* clipped */
278 >                                thisray.ro = NULL;
279 >                                thisray.rot = FHUGE;
280 >                        } else
281 >                                sourcehit(&thisray);
282 >        } else
283                  rayvalue(&thisray);
284          printvals(&thisray);
285   }
# Line 512 | Line 542 | oputm(r)                               /* print modifier */
542   register RAY  *r;
543   {
544          if (r->ro != NULL)
545 <                fputs(objptr(r->ro->omod)->oname, stdout);
545 >                if (r->ro->omod != OVOID)
546 >                        fputs(objptr(r->ro->omod)->oname, stdout);
547 >                else
548 >                        fputs(VOIDID, stdout);
549          else
550                  putchar('*');
551          putchar('\t');

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines