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

Comparing ray/src/util/glarendx.c (file contents):
Revision 1.3 by greg, Wed Apr 17 11:55:03 1991 UTC vs.
Revision 1.7 by greg, Mon Apr 29 08:31:23 1991 UTC

# Line 53 | Line 53 | int    print_header = 1;
53  
54   VIEW    midview = STDVIEW;
55  
56 + int     wrongformat = 0;
57  
58 +
59   main(argc, argv)
60   int     argc;
61   char    *argv[];
# Line 89 | Line 91 | char   *argv[];
91                          exit(1);
92                  }
93                                          /* read header */
94 <        getheader(stdin, headline);
94 >        getheader(stdin, headline, NULL);
95 >        if (wrongformat) {
96 >                fprintf(stderr, "%s: bad input format\n", progname);
97 >                exit(1);
98 >        }
99          if (print_header) {             /* add to header */
100                  printargs(i, argv, stdout);
101                  putchar('\n');
102          }
103                                          /* set view */
104          if (setview(&midview) != NULL) {
105 <                fprintf(stderr, "%s: bad view information in input\n");
105 >                fprintf(stderr, "%s: bad view information in input\n",
106 >                                progname);
107                  exit(1);
108          }
109                                          /* get findglare data */
# Line 119 | Line 126 | userr:
126   headline(s)                     /* get line from header */
127   char    *s;
128   {
129 +        char    fmt[32];
130 +
131          if (print_header)               /* copy to output */
132                  fputs(s, stdout);
133          if (!strncmp(s, VIEWSTR, VIEWSTRL))
134                  sscanview(&midview, s+VIEWSTRL);
135 +        else if (isformat(s)) {
136 +                formatval(fmt, s);
137 +                wrongformat = strcmp(fmt, "ascii");
138 +        }
139   }
140  
141  
# Line 226 | Line 239 | struct glare_dir       *gd;
239   * All vectors are assumed to be normalized.
240   * This function is an implementation of the method proposed by
241   * Robert Levin in his 1975 JIES article.
242 + * This calculation presumes the view direction and up vectors perpendicular.
243   * We return a value less than zero for improper positions.
244   */
245  
# Line 239 | Line 253 | FVECT  sd, vd, vu;
253          d = DOT(sd,vd);
254          if (d <= 0.0)
255                  return(-1.0);
256 +        if (d >= 1.0)
257 +                return(1.0);
258          sigma = acos(d) * (180./PI);
259 <        tau = acos(DOT(sd,vu)/sqrt(1.0-d*d)) * (180./PI);
259 >        d = DOT(sd,vu)/sqrt(1.0-d*d);
260 >        if (d >= 1.0)
261 >                tau = 0.0;
262 >        else
263 >                tau = acos(d) * (180./PI);
264          return( exp( sigma*( (35.2 - tau*.31889 - 1.22*exp(-.22222*tau))*1e-3
265                          + sigma*(21. + tau*(.26667 + tau*-.002963))*1e-5 )
266                  ) );
# Line 253 | Line 273 | struct glare_dir       *gd;
273   {
274   #define q(w)    (20.4*w+1.52*pow(w,.2)-.075)
275          register struct glare_src       *gs;
276 +        FVECT   mydir;
277          double  p;
278          double  sum;
279          double  wtot, brsum;
280          int     n;
281  
282 +        spinvector(mydir, midview.vdir, midview.vup, gd->ang);
283          sum = wtot = brsum = 0.0; n = 0;
284          for (gs = all_srcs; gs != NULL; gs = gs->next) {
285 <                p = posindex(gs->dir, midview.vdir, midview.vup);
285 >                p = posindex(gs->dir, mydir, midview.vup);
286                  if (p <= FTINY)
287                          continue;
288                  sum += gs->lum * q(gs->dom) / p;
# Line 291 | Line 313 | double
313   guth_vcp(gd)            /* compute Guth visual comfort probability */
314   struct glare_dir        *gd;
315   {
316 <        return(100.*norm_integral(6.374-1.3227*log(guth_dgr(gd))));
316 >        double  dgr;
317 >
318 >        dgr = guth_dgr(gd);
319 >        if (dgr <= FTINY)
320 >                return(100.0);
321 >        return(100.*norm_integral(6.374-1.3227*log(dgr)));
322   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines