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

Comparing ray/src/cv/bsdf2rad.c (file contents):
Revision 2.1 by greg, Tue Oct 22 04:29:27 2013 UTC vs.
Revision 2.3 by greg, Thu Oct 31 18:19:18 2013 UTC

# Line 26 | Line 26 | char   *progname;
26   int
27   main(int argc, char *argv[])
28   {
29 +        int     showPeaks = 0;
30          char    buf[128];
31          FILE    *fp;
32          RBFNODE *rbf;
# Line 34 | Line 35 | main(int argc, char *argv[])
35          int     i, j, n;
36  
37          progname = argv[0];
38 +        if (argc > 1 && !strcmp(argv[1], "-p")) {
39 +                ++showPeaks;
40 +                ++argv; --argc;
41 +        }
42          if (argc < 4) {
43 <                fprintf(stderr, "Usage: %s bsdf.sir theta1 phi1 .. > output.rad\n", argv[0]);
43 >                fprintf(stderr, "Usage: %s [-p] bsdf.sir theta1 phi1 .. > output.rad\n", progname);
44                  return(1);
45          }
46                                                  /* load input */
47          if ((fp = fopen(argv[1], "rb")) == NULL) {
48                  fprintf(stderr, "%s: cannot open BSDF interpolant '%s'\n",
49 <                                argv[0], argv[1]);
49 >                                progname, argv[1]);
50                  return(1);
51          }
52          if (!load_bsdf_rep(fp))
53                  return(1);
54          fclose(fp);
55          min_log = log(bsdf_min*.5);
56 <                                                /* output surface(s) */
56 >                                                /* output BSDF rep. */
57          for (n = 0; (n < 6) & (2*n+3 < argc); n++) {
53                printf("void trans tmat\n0\n0\n7 %f %f %f .04 .04 .9 1\n",
54                                colarr[n][0], colarr[n][1], colarr[n][2]);
55                fflush(stdout);
56                sprintf(buf, "gensurf tmat bsdf - - - %d %d", GRIDRES-1, GRIDRES-1);
57                fp = popen(buf, "w");
58                if (fp == NULL) {
59                        fprintf(stderr, "%s: cannot open '| %s'\n", argv[0], buf);
60                        return(1);
61                }
58                  dir[2] = sin((M_PI/180.)*atof(argv[2*n+2]));
59                  dir[0] = dir[2] * cos((M_PI/180.)*atof(argv[2*n+3]));
60                  dir[1] = dir[2] * sin((M_PI/180.)*atof(argv[2*n+3]));
61                  dir[2] = input_orient * sqrt(1. - dir[2]*dir[2]);
62 + #ifdef DEBUG
63                  fprintf(stderr, "Computing DSF for incident direction (%.1f,%.1f)\n",
64                                  get_theta180(dir), get_phi360(dir));
65 + #endif
66                  rbf = advect_rbf(dir, 15000);
67 + #ifdef DEBUG
68                  if (rbf == NULL)
69                          fputs("NULL RBF\n", stderr);
70                  else
71                          fprintf(stderr, "Hemispherical reflectance: %.3f\n", rbf->vtotal);
72 + #endif
73 +                printf("void trans tmat\n0\n0\n7 %f %f %f .04 .04 .9 1\n",
74 +                                colarr[n][0], colarr[n][1], colarr[n][2]);
75 +                if (showPeaks && rbf != NULL) {
76 +                        printf("void plastic pmat\n0\n0\n5 %f %f %f .04 .08\n",
77 +                                1.-colarr[n][0], 1.-colarr[n][1], 1.-colarr[n][2]);
78 +                        for (i = 0; i < rbf->nrbf; i++) {
79 +                                ovec_from_pos(dir, rbf->rbfa[i].gx, rbf->rbfa[i].gy);
80 +                                bsdf = eval_rbfrep(rbf, dir) / (output_orient*dir[2]);
81 +                                bsdf = log(bsdf) - min_log;
82 +                                printf("pmat sphere p%d\n0\n0\n4 %f %f %f %f\n",
83 +                                        i+1, dir[0]*bsdf, dir[1]*bsdf, dir[2]*bsdf,
84 +                                                .007*bsdf);
85 +                        }
86 +                }
87 +                fflush(stdout);
88 +                sprintf(buf, "gensurf tmat bsdf - - - %d %d", GRIDRES-1, GRIDRES-1);
89 +                fp = popen(buf, "w");
90 +                if (fp == NULL) {
91 +                        fprintf(stderr, "%s: cannot open '| %s'\n", progname, buf);
92 +                        return(1);
93 +                }
94                  for (i = 0; i < GRIDRES; i++)
95                      for (j = 0; j < GRIDRES; j++) {
96                          ovec_from_pos(dir, i, j);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines