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

Comparing ray/src/rt/lookamb.c (file contents):
Revision 1.1 by greg, Thu Feb 2 10:41:25 1989 UTC vs.
Revision 2.7 by greg, Sat Feb 22 02:07:28 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1986 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   *  lookamb.c - program to examine ambient components.
6 + */
7 +
8 + /* ====================================================================
9 + * The Radiance Software License, Version 1.0
10   *
11 < *     10/8/86
11 > * Copyright (c) 1990 - 2002 The Regents of the University of California,
12 > * through Lawrence Berkeley National Laboratory.   All rights reserved.
13 > *
14 > * Redistribution and use in source and binary forms, with or without
15 > * modification, are permitted provided that the following conditions
16 > * are met:
17 > *
18 > * 1. Redistributions of source code must retain the above copyright
19 > *         notice, this list of conditions and the following disclaimer.
20 > *
21 > * 2. Redistributions in binary form must reproduce the above copyright
22 > *       notice, this list of conditions and the following disclaimer in
23 > *       the documentation and/or other materials provided with the
24 > *       distribution.
25 > *
26 > * 3. The end-user documentation included with the redistribution,
27 > *           if any, must include the following acknowledgment:
28 > *             "This product includes Radiance software
29 > *                 (http://radsite.lbl.gov/)
30 > *                 developed by the Lawrence Berkeley National Laboratory
31 > *               (http://www.lbl.gov/)."
32 > *       Alternately, this acknowledgment may appear in the software itself,
33 > *       if and wherever such third-party acknowledgments normally appear.
34 > *
35 > * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
36 > *       and "The Regents of the University of California" must
37 > *       not be used to endorse or promote products derived from this
38 > *       software without prior written permission. For written
39 > *       permission, please contact [email protected].
40 > *
41 > * 5. Products derived from this software may not be called "Radiance",
42 > *       nor may "Radiance" appear in their name, without prior written
43 > *       permission of Lawrence Berkeley National Laboratory.
44 > *
45 > * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
46 > * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
47 > * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48 > * DISCLAIMED.   IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
49 > * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
50 > * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
51 > * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
52 > * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
53 > * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
54 > * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
55 > * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
56 > * SUCH DAMAGE.
57 > * ====================================================================
58 > *
59 > * This software consists of voluntary contributions made by many
60 > * individuals on behalf of Lawrence Berkeley National Laboratory.   For more
61 > * information on Lawrence Berkeley National Laboratory, please see
62 > * <http://www.lbl.gov/>.
63   */
64  
65 < #include  <stdio.h>
65 > #include  "ray.h"
66  
67 < #include  "color.h"
67 > #include  "ambient.h"
68  
69  
18 typedef double  FVECT[3];
19
20 typedef struct ambval {
21        FVECT  pos;             /* position in space */
22        FVECT  dir;             /* normal direction */
23        int  lvl;               /* recursion level of parent ray */
24        float  weight;          /* weight of parent ray */
25        COLOR  val;             /* computed ambient value */
26        float  rad;             /* validity radius */
27        struct ambval  *next;   /* next in list */
28 }  AMBVAL;                      /* ambient value */
29
70   int  dataonly = 0;
71 <
71 > int  header = 1;
72   int  reverse = 0;
73  
74   AMBVAL  av;
75  
76  
77   main(argc, argv)                /* load ambient values from a file */
78 + int  argc;
79   char  *argv[];
80   {
81          FILE  *fp;
# Line 49 | Line 90 | char  *argv[];
90                          case 'r':
91                                  reverse = 1;
92                                  break;
93 +                        case 'h':
94 +                                header = 0;
95 +                                break;
96                          default:
97                                  fprintf(stderr, "%s: unknown option '%s'\n",
98                                                  argv[0], argv[i]);
# Line 63 | Line 107 | char  *argv[];
107                  fprintf(stderr, "%s: file not found\n", argv[i]);
108                  return(1);
109          }
110 <        if (reverse)
110 >        if (reverse) {
111 >                if (header) {
112 >                        if (checkheader(fp, "ascii", stdout) < 0)
113 >                                goto formaterr;
114 >                } else {
115 >                        newheader("RADIANCE", stdout);
116 >                        printargs(argc, argv, stdout);
117 >                }
118 >                fputformat(AMBFMT, stdout);
119 >                putchar('\n');
120 > #ifdef MSDOS
121 >                setmode(fileno(stdout), O_BINARY);
122 > #endif
123 >                putambmagic(stdout);
124                  writamb(fp);
125 <        else
125 >        } else {
126 > #ifdef MSDOS
127 >                setmode(fileno(fp), O_BINARY);
128 > #endif
129 >                if (checkheader(fp, AMBFMT, header ? stdout : (FILE *)NULL) < 0)
130 >                        goto formaterr;
131 >                if (!hasambmagic(fp))
132 >                        goto formaterr;
133 >                if (header) {
134 >                        fputformat("ascii", stdout);
135 >                        putchar('\n');
136 >                }
137                  lookamb(fp);
138 +        }
139          fclose(fp);
140          return(0);
141 + formaterr:
142 +        fprintf(stderr, "%s: format error on input\n", argv[0]);
143 +        exit(1);
144   }
145  
146  
147 + void
148   lookamb(fp)                     /* get ambient values from a file */
149   FILE  *fp;
150   {
151 <        while (fread(&av, sizeof(AMBVAL), 1, fp) == 1) {
151 >        while (readambval(&av, fp)) {
152                  if (dataonly) {
153                          printf("%f\t%f\t%f\t", av.pos[0], av.pos[1], av.pos[2]);
154                          printf("%f\t%f\t%f\t", av.dir[0], av.dir[1], av.dir[2]);
155                          printf("%d\t%f\t%f\t", av.lvl, av.weight, av.rad);
156 <                        printf("%e\t%e\t%e\n", colval(av.val,RED),
156 >                        printf("%e\t%e\t%e\t", colval(av.val,RED),
157                                                  colval(av.val,GRN),
158                                                  colval(av.val,BLU));
159 +                        printf("%f\t%f\t%f\t", av.gpos[0],
160 +                                        av.gpos[1], av.gpos[2]);
161 +                        printf("%f\t%f\t%f\n", av.gdir[0],
162 +                                        av.gdir[1], av.gdir[2]);
163                  } else {
164                          printf("\nPosition:\t%f\t%f\t%f\n", av.pos[0],
165                                          av.pos[1], av.pos[2]);
# Line 92 | Line 169 | FILE  *fp;
169                                          av.weight, av.rad);
170                          printf("Value:\t\t%e\t%e\t%e\n", colval(av.val,RED),
171                                          colval(av.val,GRN), colval(av.val,BLU));
172 +                        printf("Pos.Grad:\t%f\t%f\t%f\n", av.gpos[0],
173 +                                        av.gpos[1], av.gpos[2]);
174 +                        printf("Dir.Grad:\t%f\t%f\t%f\n", av.gdir[0],
175 +                                        av.gdir[1], av.gdir[2]);
176                  }
177                  if (ferror(stdout))
178                          exit(1);
# Line 99 | Line 180 | FILE  *fp;
180   }
181  
182  
183 + void
184   writamb(fp)                     /* write binary ambient values */
185   FILE  *fp;
186   {
187          for ( ; ; ) {
188                  if (!dataonly)
189                          fscanf(fp, "%*s");
190 <                if (fscanf(fp, "%lf %lf %lf",
190 >                if (fscanf(fp, "%f %f %f",
191                                  &av.pos[0], &av.pos[1], &av.pos[2]) != 3)
192                          return;
193                  if (!dataonly)
194                          fscanf(fp, "%*s");
195 <                if (fscanf(fp, "%lf %lf %lf",
195 >                if (fscanf(fp, "%f %f %f",
196                                  &av.dir[0], &av.dir[1], &av.dir[2]) != 3)
197                          return;
198                  if (!dataonly)
# Line 123 | Line 205 | FILE  *fp;
205                  if (fscanf(fp, "%f %f %f",
206                                  &av.val[RED], &av.val[GRN], &av.val[BLU]) != 3)
207                          return;
208 <                fwrite(&av, sizeof(AMBVAL), 1, stdout);
208 >                if (!dataonly)
209 >                        fscanf(fp, "%*s");
210 >                if (fscanf(fp, "%f %f %f",
211 >                                &av.gpos[0], &av.gpos[1], &av.gpos[2]) != 3)
212 >                        return;
213 >                if (!dataonly)
214 >                        fscanf(fp, "%*s");
215 >                if (fscanf(fp, "%f %f %f",
216 >                                &av.gdir[0], &av.gdir[1], &av.gdir[2]) != 3)
217 >                        return;
218 >                av.next = NULL;
219 >                writambval(&av, stdout);
220                  if (ferror(stdout))
221                          exit(1);
222          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines