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

Comparing ray/src/px/pf2.c (file contents):
Revision 2.3 by greg, Fri Oct 2 16:23:20 1992 UTC vs.
Revision 2.7 by schorsch, Sun Mar 28 20:33:14 2004 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1992 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   *  pf2.c - routines used by pfilt.
9 *
10 *     10/3/85
6   */
7  
8   #include  <stdio.h>
9 <
9 > #include  <stdlib.h>
10   #include  <math.h>
11  
12 + #include  "rterror.h"
13   #include  "random.h"
18
14   #include  "color.h"
15 + #include  "pfilt.h"
16  
17   #define  PI             3.14159265359
22
18   #define  FTINY          (1e-6)
19  
25 extern int  nrows, ncols;       /* number of rows and columns for output */
26
27 extern int  xres, yres;         /* x and y resolution */
28
29 extern int  avghot;             /* true means average in avgbrt spots */
30
31 extern double  hotlvl;          /* brightness considered "hot" */
32
33 extern int  npts;               /* # of points for stars */
34
35 extern double  spread;          /* spread for star points */
36
37 extern char  *progname;
38
39 extern COLOR  exposure;         /* exposure for frame */
40
20   #define  AVGLVL         0.5     /* target mean brightness */
21  
22   double  avgbrt;                 /* average picture brightness */
23 + long    npix;                   /* # pixels in average */
24  
25   typedef struct  hotpix {        /* structure for avgbrt pixels */
26          struct hotpix  *next;   /* next in list */
# Line 53 | Line 33 | HOTPIX *head;                  /* head of avgbrt pixel list */
33  
34   double  sprdfact;               /* computed spread factor */
35  
36 + static void starpoint(COLOR  fcol, int  x, int  y, HOTPIX        *hp);
37  
38 < pass1init()                     /* prepare for first pass */
38 >
39 > extern void
40 > pass1init(void)                 /* prepare for first pass */
41   {
42          avgbrt = 0.0;
43 +        npix = 0;
44          head = NULL;
45   }
46  
47  
48 < pass1default()                  /* for single pass */
48 > extern void
49 > pass1default(void)                      /* for single pass */
50   {
51 <        avgbrt = AVGLVL * xres * yres;
51 >        avgbrt = AVGLVL;
52 >        npix = 1;
53          head = NULL;
54   }
55  
56  
57 < pass1scan(scan, y)              /* process first pass scanline */
58 < register COLOR  *scan;
59 < int  y;
57 > extern void
58 > pass1scan(              /* process first pass scanline */
59 >        register COLOR  *scan,
60 >        int  y
61 > )
62   {
75        extern char  *malloc();
63          double  cbrt;
64          register int  x;
65          register HOTPIX  *hp;
66  
67          for (x = 0; x < xres; x++) {
68          
69 <                cbrt = bright(scan[x]);
69 >                cbrt = (*ourbright)(scan[x]);
70  
71 <                if (avghot || cbrt < hotlvl)
72 <                        avgbrt += cbrt;
71 >                if (cbrt <= 0)
72 >                        continue;
73  
74 +                if (avghot || cbrt < hotlvl) {
75 +                        avgbrt += cbrt;
76 +                        npix++;
77 +                }
78                  if (npts && cbrt >= hotlvl) {
79                          hp = (HOTPIX *)malloc(sizeof(HOTPIX));
80                          if (hp == NULL) {
# Line 102 | Line 93 | int  y;
93   }
94  
95  
96 < pass2init()                     /* prepare for final pass */
96 > extern void
97 > pass2init(void)                 /* prepare for final pass */
98   {
99 <        avgbrt /= (double)xres * yres;
100 <
101 <        if (avgbrt <= FTINY) {
110 <                fprintf(stderr, "%s: picture too dark\n", progname);
99 >        if (!npix) {
100 >                fprintf(stderr, "%s: picture too dark or too bright\n",
101 >                                progname);
102                  quit(1);
103          }
104 +        avgbrt /= (double)npix;
105  
106          scalecolor(exposure,  AVGLVL/avgbrt);
107          
108 <        sprdfact = spread / (hotlvl * bright(exposure))
108 >        sprdfact = spread / (hotlvl * (*ourbright)(exposure))
109                          * ((double)xres*xres + (double)yres*yres) / 4.0;
110   }
111  
112  
113 < pass2scan(scan, y)              /* process final pass scanline */
114 < register COLOR  *scan;
115 < int  y;
113 > extern void
114 > pass2scan(              /* process final pass scanline */
115 >        register COLOR  *scan,
116 >        int  y
117 > )
118   {
119          int  xmin, xmax;
120          register int  x;
# Line 152 | Line 146 | int  y;
146   }
147  
148  
149 < starpoint(fcol, x, y, hp)               /* pixel is on the star's point */
150 < COLOR  fcol;
151 < int  x, y;
152 < register HOTPIX  *hp;
149 > static void
150 > starpoint(              /* pixel is on the star's point */
151 >        COLOR  fcol,
152 >        int  x,
153 >        int  y,
154 >        register HOTPIX  *hp
155 > )
156   {
157          COLOR  ctmp;
158          double  d2;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines