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 2.2 by greg, Mon Jul 13 16:17:42 1992 UTC vs.
Revision 2.19 by greg, Mon Dec 18 20:19:48 2023 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   *  lookamb.c - program to examine ambient components.
9 *
10 *     10/8/86
6   */
7  
8 < #include  <stdio.h>
8 > #include "copyright.h"
9  
10 < #include  "color.h"
11 <
10 > #include  "platform.h"
11 > #include  "ray.h"
12   #include  "ambient.h"
13  
14  
15   int  dataonly = 0;
16 <
16 > int  header = 1;
17   int  reverse = 0;
18  
19   AMBVAL  av;
20  
21  
22 < main(argc, argv)                /* load ambient values from a file */
23 < char  *argv[];
22 > static void
23 > lookamb(                        /* load & convert ambient values from a file */
24 >        FILE  *fp
25 > )
26   {
27 <        FILE  *fp;
28 <        int  i;
27 >        FVECT   norm, uvec;
28 >        COLOR   avcol;
29  
33        for (i = 1; i < argc; i++)
34                if (argv[i][0] == '-')
35                        switch (argv[i][1]) {
36                        case 'd':
37                                dataonly = 1;
38                                break;
39                        case 'r':
40                                reverse = 1;
41                                break;
42                        default:
43                                fprintf(stderr, "%s: unknown option '%s'\n",
44                                                argv[0], argv[i]);
45                                return(1);
46                        }
47                else
48                        break;
49
50        if (i >= argc)
51                fp = stdin;
52        else if ((fp = fopen(argv[i], "r")) == NULL) {
53                fprintf(stderr, "%s: file not found\n", argv[i]);
54                return(1);
55        }
56        if (reverse)
57                writamb(fp);
58        else
59                lookamb(fp);
60        fclose(fp);
61        return(0);
62 }
63
64
65 lookamb(fp)                     /* get ambient values from a file */
66 FILE  *fp;
67 {
30          while (readambval(&av, fp)) {
31 +                decodedir(norm, av.ndir);
32 +                decodedir(uvec, av.udir);
33 +                scolor2rgb(avcol, av.val, AMB_CNDX[3], AMB_WLPART);
34                  if (dataonly) {
35                          printf("%f\t%f\t%f\t", av.pos[0], av.pos[1], av.pos[2]);
36 <                        printf("%f\t%f\t%f\t", av.dir[0], av.dir[1], av.dir[2]);
37 <                        printf("%d\t%f\t%f\t", av.lvl, av.weight, av.rad);
38 <                        printf("%e\t%e\t%e\t", colval(av.val,RED),
39 <                                                colval(av.val,GRN),
40 <                                                colval(av.val,BLU));
41 <                        printf("%f\t%f\t%f\t", av.gpos[0],
42 <                                        av.gpos[1], av.gpos[2]);
43 <                        printf("%f\t%f\t%f\n", av.gdir[0],
44 <                                        av.gdir[1], av.gdir[2]);
36 >                        printf("%f\t%f\t%f\t", norm[0], norm[1], norm[2]);
37 >                        printf("%f\t%f\t%f\t", uvec[0], uvec[1], uvec[2]);
38 >                        printf("%d\t%f\t%f\t%f\t", av.lvl, av.weight,
39 >                                        av.rad[0], av.rad[1]);
40 >                        printf("%e\t%e\t%e\t", colval(avcol,RED),
41 >                                                colval(avcol,GRN),
42 >                                                colval(avcol,BLU));
43 >                        printf("%f\t%f\t", av.gpos[0], av.gpos[1]);
44 >                        printf("%f\t%f\t", av.gdir[0], av.gdir[1]);
45 >                        printf("%u\n", av.corral);
46                  } else {
47 <                        printf("\nPosition:\t%f\t%f\t%f\n", av.pos[0],
47 >                        printf("Position:\t%f\t%f\t%f\n", av.pos[0],
48                                          av.pos[1], av.pos[2]);
49 <                        printf("Direction:\t%f\t%f\t%f\n", av.dir[0],
50 <                                        av.dir[1], av.dir[2]);
51 <                        printf("Lvl,Wt,Rad:\t%d\t\t%f\t%f\n", av.lvl,
52 <                                        av.weight, av.rad);
53 <                        printf("Value:\t\t%e\t%e\t%e\n", colval(av.val,RED),
54 <                                        colval(av.val,GRN), colval(av.val,BLU));
55 <                        printf("Pos.Grad:\t%f\t%f\t%f\n", av.gpos[0],
56 <                                        av.gpos[1], av.gpos[2]);
57 <                        printf("Dir.Grad:\t%f\t%f\t%f\n", av.gdir[0],
58 <                                        av.gdir[1], av.gdir[2]);
49 >                        printf("Normal:\t\t%f\t%f\t%f\n",
50 >                                        norm[0], norm[1], norm[2]);
51 >                        printf("Uvector:\t%f\t%f\t%f\n",
52 >                                        uvec[0], uvec[1], uvec[2]);
53 >                        printf("Lvl,Wt,UVrad:\t%d\t\t%f\t%f\t%f\n", av.lvl,
54 >                                        av.weight, av.rad[0], av.rad[1]);
55 >                        printf("Value:\t\t%e\t%e\t%e\n", colval(avcol,RED),
56 >                                        colval(avcol,GRN), colval(avcol,BLU));
57 >                        printf("Pos.Grad:\t%f\t%f\n", av.gpos[0], av.gpos[1]);
58 >                        printf("Dir.Grad:\t%f\t%f\n", av.gdir[0], av.gdir[1]);
59 >                        printf("Corral:\t\t%8X\n\n", av.corral);
60                  }
61                  if (ferror(stdout))
62                          exit(1);
# Line 97 | Line 64 | FILE  *fp;
64   }
65  
66  
67 < writamb(fp)                     /* write binary ambient values */
68 < FILE  *fp;
67 > static void
68 > writamb(                        /* write binary ambient values to stdout */
69 >        FILE  *fp
70 > )
71   {
72 +        FVECT   norm;
73 +        COLOR   avcol;
74 +
75          for ( ; ; ) {
76                  if (!dataonly)
77                          fscanf(fp, "%*s");
# Line 108 | Line 80 | FILE  *fp;
80                          return;
81                  if (!dataonly)
82                          fscanf(fp, "%*s");
83 <                if (fscanf(fp, "%f %f %f",
84 <                                &av.dir[0], &av.dir[1], &av.dir[2]) != 3)
83 >                if (fscanf(fp, FVFORMAT, &norm[0], &norm[1], &norm[2]) != 3 ||
84 >                                normalize(norm) == 0)
85                          return;
86 +                av.ndir = encodedir(norm);
87                  if (!dataonly)
88                          fscanf(fp, "%*s");
89 <                if (fscanf(fp, "%d %f %f",
90 <                                &av.lvl, &av.weight, &av.rad) != 3)
89 >                if (fscanf(fp, FVFORMAT, &norm[0], &norm[1], &norm[2]) != 3 ||
90 >                                normalize(norm) == 0)
91                          return;
92 +                av.udir = encodedir(norm);
93                  if (!dataonly)
94                          fscanf(fp, "%*s");
95 <                if (fscanf(fp, "%f %f %f",
96 <                                &av.val[RED], &av.val[GRN], &av.val[BLU]) != 3)
95 >                if (fscanf(fp, "%hd %f %f %f", &av.lvl, &av.weight,
96 >                                &av.rad[0], &av.rad[1]) != 4)
97                          return;
98                  if (!dataonly)
99                          fscanf(fp, "%*s");
100                  if (fscanf(fp, "%f %f %f",
101 <                                &av.gpos[0], &av.gpos[1], &av.gpos[2]) != 3)
101 >                                &avcol[RED], &avcol[GRN], &avcol[BLU]) != 3)
102                          return;
103 +                setscolor(av.val, avcol[RED], avcol[GRN], avcol[BLU]);
104                  if (!dataonly)
105                          fscanf(fp, "%*s");
106 <                if (fscanf(fp, "%f %f %f",
132 <                                &av.gdir[0], &av.gdir[1], &av.gdir[2]) != 3)
106 >                if (fscanf(fp, "%f %f", &av.gpos[0], &av.gpos[1]) != 2)
107                          return;
108 +                if (!dataonly)
109 +                        fscanf(fp, "%*s");
110 +                if (fscanf(fp, "%f %f", &av.gdir[0], &av.gdir[1]) != 2)
111 +                        return;
112 +                if (dataonly) {
113 +                        if (fscanf(fp, "%u", &av.corral) != 1)
114 +                                return;
115 +                } else if (fscanf(fp, "%*s %X", &av.corral) != 1)
116 +                        return;
117                  av.next = NULL;
118 <                writambval(&av, stdout);
136 <                if (ferror(stdout))
118 >                if (writambval(&av, stdout) < 0)
119                          exit(1);
120          }
121 + }
122 +
123 +
124 + int
125 + main(           /* load ambient values from a file */
126 +        int  argc,
127 +        char  *argv[]
128 + )
129 + {
130 +        FILE  *fp;
131 +        int  i;
132 +
133 +        for (i = 1; i < argc; i++)
134 +                if (argv[i][0] == '-')
135 +                        switch (argv[i][1]) {
136 +                        case 'd':
137 +                                dataonly = 1;
138 +                                break;
139 +                        case 'r':
140 +                                reverse = 1;
141 +                                break;
142 +                        case 'h':
143 +                                header = 0;
144 +                                break;
145 +                        default:
146 +                                fprintf(stderr, "%s: unknown option '%s'\n",
147 +                                                argv[0], argv[i]);
148 +                                return(1);
149 +                        }
150 +                else
151 +                        break;
152 +
153 +        if (i >= argc)
154 +                fp = stdin;
155 +        else if ((fp = fopen(argv[i], "r")) == NULL) {
156 +                fprintf(stderr, "%s: file not found\n", argv[i]);
157 +                return(1);
158 +        }
159 +        if (reverse) {
160 +                SET_FILE_BINARY(stdout);
161 +                if (header) {
162 +                        if (checkheader(fp, "ascii", stdout) < 0)
163 +                                goto formaterr;
164 +                } else {
165 +                        newheader("RADIANCE", stdout);
166 +                        printargs(argc, argv, stdout);
167 +                }
168 +                fputncomp(3, stdout);
169 +                fputformat(AMBFMT, stdout);
170 +                fputc('\n', stdout);
171 +                putambmagic(stdout);
172 +                writamb(fp);
173 +        } else {
174 +                SET_FILE_BINARY(fp);
175 +                if (getheader(fp, amb_headline, header ? stdout : (FILE *)NULL) < 0)
176 +                        goto formaterr;
177 +                if (!hasambmagic(fp))
178 +                        goto formaterr;
179 +                if (header) {
180 +                        fputformat("ascii", stdout);
181 +                        fputc('\n', stdout);
182 +                }
183 +                lookamb(fp);
184 +        }
185 +        fclose(fp);
186 +        return(0);
187 + formaterr:
188 +        fprintf(stderr, "%s: format error on input\n", argv[0]);
189 +        exit(1);
190   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines