ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/lookamb.c
Revision: 2.18
Committed: Wed Nov 15 18:02:52 2023 UTC (6 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.17: +17 -14 lines
Log Message:
feat(rpict,rtrace,rcontrib,rtpict): Hyperspectral rendering (except photon map)

File Contents

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