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

Comparing ray/src/gen/mkillum3.c (file contents):
Revision 2.4 by greg, Mon Aug 10 15:55:10 1992 UTC vs.
Revision 2.7 by greg, Sat Feb 22 02:07:24 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1991 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   * Routines to print mkillum objects
6   */
# Line 95 | Line 92 | float  *da;
92   int  n, m;
93   FVECT  u, v, w;
94   {
95 +        float  *Ninv;
96          FILE  *dfp;
99        float  col[3];
97          int  i;
98  
99 +        if ((Ninv = (float *)malloc(3*m*sizeof(float))) == NULL)
100 +                error(SYSTEM, "out of memory in flatout");
101 +        compinv(Ninv, da, m);
102          if (il->flags & IL_COLDST) {
103                  printf("\n%s %s %s%s", VOIDID, ofun[PAT_CDATA].funame,
104                                  il->matname, DSTSUF);
105 <                printf("\n9 h_red h_grn h_blu");
105 >                printf("\n9 red green blue");
106                  for (i = 0; i < 3; i++) {
107                          dfp = dfopen(il, DATORD[i]);
108                          fprintf(dfp, "2\n%f %f %d\n%f %f %d\n",
109 <                                        1.-.5/n, .5/n, n,
109 >                                        1.+.5/n, .5/n, n+1,
110                                          0., 2.*PI, m+1);
111 +                        colorout(i, Ninv, 1, m, 1./il->nsamps/il->col[i], dfp);
112                          colorout(i, da, n, m, 1./il->nsamps/il->col[i], dfp);
113 +                        fputeol(dfp);
114                          fclose(dfp);
115                          printf(" %s", dfname(il, DATORD[i]));
116                  }
117          } else {
118                  printf("\n%s %s %s%s", VOIDID, ofun[PAT_BDATA].funame,
119                                  il->matname, DSTSUF);
120 <                printf("\n5 h_gry");
120 >                printf("\n5 noneg");
121                  dfp = dfopen(il, 0);
122 <                fprintf(dfp, "2\n%f %f %d\n%f %f %d\n", 1.-.5/n, .5/n, n,
122 >                fprintf(dfp, "2\n%f %f %d\n%f %f %d\n",
123 >                                1.+.5/n, .5/n, n+1,
124                                  0., 2.*PI, m+1);
125 +                brightout(Ninv, 1, m, 1./il->nsamps/brt(il->col), dfp);
126                  brightout(da, n, m, 1./il->nsamps/brt(il->col), dfp);
127 +                fputeol(dfp);
128                  fclose(dfp);
129                  printf(" %s", dfname(il, 0));
130          }
131          printf("\n\t%s il_alth il_azih", FNCFNM);
132 <        printf("\n0\n13\n");
128 <        compavg(col, da, m, il->nsamps);
129 <        printf("\t%f\t%f\t%f\t%f\n", col[0]/il->col[0],
130 <                        col[1]/il->col[1], col[2]/il->col[2], 1.-.5/n);
132 >        printf("\n0\n9\n");
133          printf("\t%f\t%f\t%f\n", u[0], u[1], u[2]);
134          printf("\t%f\t%f\t%f\n", v[0], v[1], v[2]);
135          printf("\t%f\t%f\t%f\n", w[0], w[1], w[2]);
136          il->dfnum++;
137 +        free((void *)Ninv);
138   }
139  
140  
# Line 140 | Line 143 | struct illum_args  *il;
143   float  *da;
144   int  n, m;
145   {
146 +        float  *Ninv, *Sinv;
147          FILE  *dfp;
144        float  col[3];
148          int  i;
149  
150 +        if ((Ninv = (float *)malloc(3*m*sizeof(float))) == NULL ||
151 +                        (Sinv = (float *)malloc(3*m*sizeof(float))) == NULL)
152 +                error(SYSTEM, "out of memory in roundout");
153 +        compinv(Ninv, da, m);
154 +        compinv(Sinv, da+3*m*(n-1), m);
155          if (il->flags & IL_COLDST) {
156                  printf("\n%s %s %s%s", VOIDID, ofun[PAT_CDATA].funame,
157                                  il->matname, DSTSUF);
158 <                printf("\n9 s_red s_grn s_blu");
158 >                printf("\n9 red green blue");
159                  for (i = 0; i < 3; i++) {
160                          dfp = dfopen(il, DATORD[i]);
161                          fprintf(dfp, "2\n%f %f %d\n%f %f %d\n",
162 <                                        1.-1./n, -1.+1./n, n,
162 >                                        1.+1./n, -1.-1./n, n+2,
163                                          0., 2.*PI, m+1);
164 +                        colorout(i, Ninv, 1, m, 1./il->nsamps/il->col[i], dfp);
165                          colorout(i, da, n, m, 1./il->nsamps/il->col[i], dfp);
166 +                        colorout(i, Sinv, 1, m, 1./il->nsamps/il->col[i], dfp);
167 +                        fputeol(dfp);
168                          fclose(dfp);
169                          printf(" %s", dfname(il, DATORD[i]));
170                  }
171          } else {
172                  printf("\n%s %s %s%s", VOIDID, ofun[PAT_BDATA].funame,
173                                  il->matname, DSTSUF);
174 <                printf("\n5 s_gry");
174 >                printf("\n5 noneg");
175                  dfp = dfopen(il, 0);
176 <                fprintf(dfp, "2\n%f %f %d\n%f %f %d\n", 1.-1./n, -1.+1./n, n,
176 >                fprintf(dfp, "2\n%f %f %d\n%f %f %d\n",
177 >                                1.+1./n, -1.-1./n, n+2,
178                                  0., 2.*PI, m+1);
179 +                brightout(Ninv, 1, m, 1./il->nsamps/brt(il->col), dfp);
180                  brightout(da, n, m, 1./il->nsamps/brt(il->col), dfp);
181 +                brightout(Sinv, 1, m, 1./il->nsamps/brt(il->col), dfp);
182 +                fputeol(dfp);
183                  fclose(dfp);
184                  printf(" %s", dfname(il, 0));
185          }
186          printf("\n\t%s il_alt il_azi", FNCFNM);
187 <        printf("\n0\n7\n");
173 <        compavg(col, da, m, il->nsamps);                /* north pole */
174 <        printf("\t%f\t%f\t%f\n", col[0]/il->col[0],
175 <                        col[1]/il->col[1], col[2]/il->col[2]);
176 <        compavg(col, da+(n-1)*m*3, m, il->nsamps);      /* south pole */
177 <        printf("\t%f\t%f\t%f\n", col[0]/il->col[0],
178 <                        col[1]/il->col[1], col[2]/il->col[2]);
179 <        printf("\t%f\n", 1.-1./n);
187 >        printf("\n0\n0\n");
188          il->dfnum++;
189 +        free((void *)Ninv);
190 +        free((void *)Sinv);
191   }
192  
193  
# Line 210 | Line 220 | OBJREC  *ob;
220   }
221  
222  
223 < compavg(col, da, n, ns)         /* compute average for set of data values */
223 > compavg(col, da, n)             /* compute average for set of data values */
224   float  col[3];
225   register float  *da;
226 < int  n, ns;
226 > int  n;
227   {
228          register int  i;
229  
# Line 225 | Line 235 | int  n, ns;
235                  col[2] += *da++;
236          }
237          for (i = 0; i < 3; i++)
238 <                col[i] /= (double)(n*ns);
238 >                col[i] /= (double)n;
239   }
240  
241  
242 + compinv(rinv, rp, m)            /* compute other side of row average */
243 + register float  *rinv, *rp;
244 + int  m;
245 + {
246 +        float  avg[3];
247 +
248 +        compavg(avg, rp, m);            /* row average */
249 +        while (m-- > 0) {
250 +                *rinv++ = 2.*avg[0] - *rp++;
251 +                *rinv++ = 2.*avg[1] - *rp++;
252 +                *rinv++ = 2.*avg[2] - *rp++;
253 +        }
254 + }
255 +
256 +
257   average(il, da, n)              /* evaluate average value for distribution */
258   register struct illum_args  *il;
259   float  *da;
260   int  n;
261   {
262 <        compavg(il->col, da, n, il->nsamps);
262 >        compavg(il->col, da, n);        /* average */
263 >        if (il->nsamps > 1) {
264 >                il->col[0] /= (double)il->nsamps;
265 >                il->col[1] /= (double)il->nsamps;
266 >                il->col[2] /= (double)il->nsamps;
267 >        }
268                                          /* brighter than minimum? */
269          return(brt(il->col) > il->minbrt+FTINY);
270   }
# Line 246 | Line 276 | fputnum(d, fp)                 /* put out a number to fp */
276   double  d;
277   FILE  *fp;
278   {
279 <        if (colmcnt++ % 6 == 0)
279 >        if (colmcnt++ % 5 == 0)
280                  putc('\n', fp);
281          fprintf(fp, " %11e", d);
282   }
# Line 276 | Line 306 | FILE  *fp;
306                  }
307                  fputnum(mult*da[p-3*m], fp);    /* wrap phi */
308          }
279        fputeol(fp);
309   }
310  
311  
# Line 295 | Line 324 | FILE  *fp;
324                  }
325                  fputnum(mult*brt(da-3*m), fp);  /* wrap phi */
326          }
298        fputeol(fp);
327   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines