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

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id: lookamb.c,v 2.17 2019/05/14 17:39:10 greg Exp $";
3 #endif
4 /*
5 * lookamb.c - program to examine ambient components.
6 */
7
8 #include "copyright.h"
9
10 #include "platform.h"
11 #include "ray.h"
12 #include "ambient.h"
13
14
15 int dataonly = 0;
16 int header = 1;
17 int reverse = 0;
18
19 AMBVAL av;
20
21
22 static void
23 lookamb( /* load & convert ambient values from a file */
24 FILE *fp
25 )
26 {
27 FVECT norm, uvec;
28 COLOR avcol;
29
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", 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("Position:\t%f\t%f\t%f\n", av.pos[0],
48 av.pos[1], av.pos[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);
63 }
64 }
65
66
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");
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 if (fscanf(fp, "%hd %f %f %f", &av.lvl, &av.weight,
94 &av.rad[0], &av.rad[1]) != 4)
95 return;
96 if (!dataonly)
97 fscanf(fp, "%*s");
98 if (fscanf(fp, "%f %f %f",
99 &avcol[RED], &avcol[GRN], &avcol[BLU]) != 3)
100 return;
101 setscolor(av.val, avcol[RED], avcol[GRN], avcol[BLU]);
102 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 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 av.next = NULL;
116 if (writambval(&av, stdout) < 0)
117 exit(1);
118 }
119 }
120
121
122 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 SET_FILE_BINARY(stdout);
159 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 fputncomp(3, stdout);
167 fputformat(AMBFMT, stdout);
168 fputc('\n', stdout);
169 putambmagic(stdout);
170 writamb(fp);
171 } else {
172 SET_FILE_BINARY(fp);
173 if (getheader(fp, amb_headline, header ? stdout : (FILE *)NULL) < 0)
174 goto formaterr;
175 if (!hasambmagic(fp))
176 goto formaterr;
177 if (header) {
178 fputformat("ascii", stdout);
179 fputc('\n', stdout);
180 }
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 }