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

Comparing ray/src/gen/gensky.c (file contents):
Revision 2.3 by greg, Tue Mar 10 11:12:06 1992 UTC vs.
Revision 2.9 by greg, Wed Dec 9 08:32:52 1992 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1986 Regents of the University of California */
1 > /* Copyright (c) 1992 Regents of the University of California */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
# Line 36 | Line 36 | extern double  s_longitude;
36   extern double  s_meridian;
37                                          /* required values */
38   int  month, day;                                /* date */
39 < double  hour;                                   /* standard time */
39 > double  hour;                                   /* time */
40 > int  tsolar;                                    /* 0=standard, 1=solar */
41   double  altitude, azimuth;                      /* or solar angles */
42                                          /* default values */
43 < int  cloudy = 0;
43 > int  cloudy = 0;                                /* 1=standard, 2=uniform */
44   int  dosun = 1;
45   double  zenithbr = -1.0;
46   double  turbidity = 2.75;
# Line 48 | Line 49 | double  gprefl = 0.2;
49   double  sundir[3];
50   double  groundbr;
51   double  F2;
52 < double  solarbr;
52 > double  solarbr = -1.0;
53  
54   char  *progname;
55   char  errmsg[128];
# Line 58 | Line 59 | main(argc, argv)
59   int  argc;
60   char  *argv[];
61   {
61        extern double  fabs();
62          int  i;
63  
64          progname = argv[0];
# Line 74 | Line 74 | char  *argv[];
74                  month = 0;
75          } else {
76                  month = atoi(argv[1]);
77 +                if (month < 1 || month > 12)
78 +                        userror("bad month");
79                  day = atoi(argv[2]);
80 +                if (day < 1 || day > 31)
81 +                        userror("bad day");
82                  hour = atof(argv[3]);
83 +                if (hour < 0 || hour >= 24)
84 +                        userror("bad hour");
85 +                tsolar = argv[3][0] == '+';
86          }
87          for (i = 4; i < argc; i++)
88                  if (argv[i][0] == '-' || argv[i][0] == '+')
# Line 84 | Line 91 | char  *argv[];
91                                  cloudy = 0;
92                                  dosun = argv[i][0] == '+';
93                                  break;
94 +                        case 'r':
95 +                                solarbr = atof(argv[++i]);
96 +                                break;
97                          case 'c':
98 <                                cloudy = 1;
98 >                                cloudy = argv[i][0] == '+' ? 2 : 1;
99                                  dosun = 0;
100                                  break;
101                          case 't':
# Line 134 | Line 144 | computesky()                   /* compute sky parameters */
144  
145                  jd = jdate(month, day);         /* Julian date */
146                  sd = sdec(jd);                  /* solar declination */
147 <                st = hour + stadj(jd);          /* solar time */
147 >                if (tsolar)                     /* solar time */
148 >                        st = hour;
149 >                else
150 >                        st = hour + stadj(jd);
151                  altitude = salt(sd, st);
152                  azimuth = sazi(sd, st);
153          }
154 +        if (!cloudy && altitude > 87.*PI/180.) {
155 +                fprintf(stderr,
156 + "%s: warning - sun too close to zenith, reducing altitude to 87 degrees\n",
157 +                                progname);
158 +                printf(
159 + "# warning - sun too close to zenith, reducing altitude to 87 degrees\n");
160 +                altitude = 87.*PI/180.;
161 +        }
162          sundir[0] = -sin(azimuth)*cos(altitude);
163          sundir[1] = -cos(azimuth)*cos(altitude);
164          sundir[2] = sin(altitude);
# Line 146 | Line 167 | computesky()                   /* compute sky parameters */
167          if (zenithbr <= 0.0)
168                  if (cloudy) {
169                          zenithbr = 8.6*sundir[2] + .123;
170 <                        zenithbr *= 1000.0/SKYEFFICACY;
170 >                        zenithbr *= 1000.0/WHTEFFICACY;
171                  } else {
172                          zenithbr = (1.376*turbidity-1.81)*tan(altitude)+0.38;
173                          zenithbr *= 1000.0/SKYEFFICACY;
# Line 155 | Line 176 | computesky()                   /* compute sky parameters */
176                  zenithbr = 0.0;
177                                          /* Compute horizontal radiance */
178          if (cloudy) {
179 <                groundbr = zenithbr*0.777778;
179 >                if (cloudy == 2)
180 >                        groundbr = zenithbr;
181 >                else
182 >                        groundbr = zenithbr*0.777778;
183                  printf("# Ground ambient level: %f\n", groundbr);
184          } else {
185                  F2 = 0.274*(0.91 + 10.0*exp(-3.0*(PI/2.0-altitude)) +
186                                  0.45*sundir[2]*sundir[2]);
187 <                groundbr = zenithbr*normsc(PI/2.0-altitude)/F2/PI;
187 >                groundbr = zenithbr*normsc(altitude)/F2/PI;
188                  printf("# Ground ambient level: %f\n", groundbr);
189 <                if (sundir[2] > 0.0) {
190 <                        if (sundir[2] > .16)
191 <                                solarbr = (1.5e9/SUNEFFICACY) *
192 <                                        (1.147 - .147/sundir[2]);
169 <                        else
170 <                                solarbr = 1.5e9/SUNEFFICACY*(1.147-.147/.16);
189 >                if (sundir[2] > 0.0 && solarbr != 0.0) {
190 >                        if (solarbr < 0.0)
191 >                                solarbr = 1.5e9/SUNEFFICACY *
192 >                                (1.147 - .147/(sundir[2]>.16?sundir[2]:.16));
193                          groundbr += solarbr*6e-5*sundir[2]/PI;
194                  } else
195                          dosun = 0;
# Line 191 | Line 213 | printsky()                     /* print out sky */
213          printf("2 skybright skybright.cal\n");
214          printf("0\n");
215          if (cloudy)
216 <                printf("3 1 %.2e %.2e\n", zenithbr, groundbr);
216 >                printf("3 %d %.2e %.2e\n", cloudy, zenithbr, groundbr);
217          else
218                  printf("7 -1 %.2e %.2e %.2e %f %f %f\n", zenithbr, groundbr,
219                                  F2, sundir[0], sundir[1], sundir[2]);
# Line 200 | Line 222 | printsky()                     /* print out sky */
222  
223   printdefaults()                 /* print default values */
224   {
225 <        if (cloudy)
225 >        if (cloudy == 1)
226                  printf("-c\t\t\t\t# Cloudy sky\n");
227 +        else if (cloudy == 2)
228 +                printf("+c\t\t\t\t# Uniform cloudy sky\n");
229          else if (dosun)
230                  printf("+s\t\t\t\t# Sunny sky with sun\n");
231          else

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines