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.18 by greg, Sun Apr 9 22:51:19 2017 UTC vs.
Revision 2.19 by greg, Mon Apr 10 01:31:37 2017 UTC

# Line 50 | Line 50 | const double   sph_xoffset = 15.;
50   char    *progname;
51  
52   /* Get Fibonacci sphere vector (0 to NINCIDENT-1) */
53 < static void
53 > static RREAL *
54   get_ivector(FVECT iv, int i)
55   {
56          const double    phistep = PI*(3. - 2.236067978);
# Line 60 | Line 60 | get_ivector(FVECT iv, int i)
60          r = sqrt(1. - iv[2]*iv[2]);
61          iv[0] = r * cos((i+1.)*phistep);
62          iv[1] = r * sin((i+1.)*phistep);
63 +
64 +        return(iv);
65   }
66  
67 + /* Convert incident vector into sphere position */
68 + static RREAL *
69 + cvt_sposition(FVECT sp, const FVECT iv, int inc_side)
70 + {
71 +        sp[0] = -iv[0]*sph_rad - inc_side*sph_xoffset;
72 +        sp[1] = -iv[1]*sph_rad;
73 +        sp[2] = iv[2]*sph_rad;
74 +
75 +        return(sp);
76 + }
77 +
78   /* Get temporary file name */
79   static char *
80   tfile_name(const char *prefix, const char *suffix, int i)
# Line 248 | Line 261 | build_wRBF(void)
261                  RBFNODE *rbf;
262                  get_ivector(ivec, i);
263                  if (input_orient < 0) {
264 <                        ivec[0] = -ivec[0]; ivec[1] = -ivec[1]; ivec[2] = -ivec[2];
264 >                        ivec[0] = -ivec[0]; ivec[2] = -ivec[2];
265                  }
266                  rbf = advect_rbf(ivec, 15000);
267                  if (!plotRBF(tfile_name(pref, dsuffix, i), rbf))
# Line 267 | Line 280 | put_mirror_arrow(const FVECT ivec, int inc_side)
280          FVECT           origin, refl;
281          int             i;
282  
283 <        for (i = 3; i--; ) origin[i] = ivec[i]*sph_rad;
271 <        origin[0] -= inc_side*sph_xoffset;
283 >        cvt_sposition(origin, ivec, inc_side);
284  
285 <        refl[0] = 2.*ivec[2]*ivec[0];
286 <        refl[1] = 2.*ivec[2]*ivec[1];
285 >        refl[0] = -2.*ivec[2]*ivec[0];
286 >        refl[1] = -2.*ivec[2]*ivec[1];
287          refl[2] = 2.*ivec[2]*ivec[2] - 1.;
288  
289          printf("\n# Mirror arrow\n");
# Line 307 | Line 319 | put_trans_arrow(const FVECT ivec, int inc_side)
319          FVECT           origin;
320          int             i;
321  
322 <        for (i = 3; i--; ) origin[i] = ivec[i]*sph_rad;
311 <        origin[0] -= inc_side*sph_xoffset;
322 >        cvt_sposition(origin, ivec, inc_side);
323  
324          printf("\n# Transmission arrow\n");
325          printf("\narrow_mat cylinder trans_dir\n0\n0\n7");
# Line 364 | Line 375 | static int
375   put_BSDFs(void)
376   {
377          const double    scalef = bsdf_rad/(log10(overall_max) - min_log10);
378 <        FVECT           ivec;
378 >        FVECT           ivec, sorg;
379          RREAL           vMtx[3][3];
380          char            *fname;
381          char            cmdbuf[256];
# Line 378 | Line 389 | put_BSDFs(void)
389          printf("\nvoid glow arrow_glow\n0\n0\n4 1 0 1 0\n");
390          printf("\nvoid mixfunc arrow_mat\n4 arrow_glow void .5 .\n0\n0\n");
391  
392 <        if (front_comp & SDsampR)
392 >        if (front_comp & SDsampR)                       /* front reflection */
393                  for (i = 0; i < NINCIDENT; i++) {
394                          get_ivector(ivec, i);
395                          put_mirror_arrow(ivec, 1);
396 +                        cvt_sposition(sorg, ivec, 1);
397 +                        ivec[0] = -ivec[0]; ivec[1] = -ivec[1]; /* normal */
398                          sprintf(xfargs, "-s %f -t %f %f %f", bsdf_rad,
399 <                                        ivec[0]*sph_rad - sph_xoffset,
387 <                                        ivec[1]*sph_rad, ivec[2]*sph_rad);
399 >                                        sorg[0], sorg[1], sorg[2]);
400                          nxfa = 6;
401                          printf("\nvoid colorfunc scale_pat\n");
402                          printf("%d bsdf_red bsdf_grn bsdf_blu bsdf2rad.cal\n\t%s\n0\n0\n",
# Line 393 | Line 405 | put_BSDFs(void)
405                          SDcompXform(vMtx, ivec, Yaxis);
406                          nxfa = addrot(xfargs, vMtx[0], vMtx[1], vMtx[2]);
407                          sprintf(xfargs+strlen(xfargs), " -s %f -t %f %f %f",
408 <                                        scalef, ivec[0]*sph_rad - sph_xoffset,
397 <                                        ivec[1]*sph_rad, ivec[2]*sph_rad);
408 >                                        scalef, sorg[0], sorg[1], sorg[2]);
409                          nxfa += 6;
410                          fname = tfile_name(frpref, dsuffix, i);
411 <                        sprintf(cmdbuf, "gensurf scale_mat %s%d %s %s %s %d %d | xform -mx -my %s",
411 >                        sprintf(cmdbuf, "gensurf scale_mat %s%d %s %s %s %d %d | xform %s",
412                                          frpref, i+1, fname, fname, fname, SAMPRES-1, SAMPRES-1,
413                                          xfargs);
414                          if (!run_cmd(cmdbuf))
415                                  return(0);
416                  }
417 <        if (front_comp & SDsampT)
417 >        if (front_comp & SDsampT)                       /* front transmission */
418                  for (i = 0; i < NINCIDENT; i++) {
419                          get_ivector(ivec, i);
420                          put_trans_arrow(ivec, 1);
421 +                        cvt_sposition(sorg, ivec, 1);
422 +                        ivec[0] = -ivec[0]; ivec[1] = -ivec[1]; /* normal */
423                          sprintf(xfargs, "-s %f -t %f %f %f", bsdf_rad,
424 <                                        ivec[0]*sph_rad - sph_xoffset,
412 <                                        ivec[1]*sph_rad, ivec[2]*sph_rad);
424 >                                        sorg[0], sorg[1], sorg[2]);
425                          nxfa = 6;
426                          printf("\nvoid colorfunc scale_pat\n");
427                          printf("%d bsdf_red bsdf_grn bsdf_blu bsdf2rad.cal\n\t%s\n0\n0\n",
# Line 418 | Line 430 | put_BSDFs(void)
430                          SDcompXform(vMtx, ivec, Yaxis);
431                          nxfa = addrot(xfargs, vMtx[0], vMtx[1], vMtx[2]);
432                          sprintf(xfargs+strlen(xfargs), " -s %f -t %f %f %f",
433 <                                        scalef, ivec[0]*sph_rad - sph_xoffset,
422 <                                        ivec[1]*sph_rad, ivec[2]*sph_rad);
433 >                                        scalef, sorg[0], sorg[1], sorg[2]);
434                          nxfa += 6;
435                          fname = tfile_name(ftpref, dsuffix, i);
436 <                        sprintf(cmdbuf, "gensurf scale_mat %s%d %s %s %s %d %d | xform -I -mx -my %s",
436 >                        sprintf(cmdbuf, "gensurf scale_mat %s%d %s %s %s %d %d | xform -I %s",
437                                          ftpref, i+1, fname, fname, fname, SAMPRES-1, SAMPRES-1,
438                                          xfargs);
439                          if (!run_cmd(cmdbuf))
440                                  return(0);
441                  }
442 <        if (back_comp & SDsampR)
442 >        if (back_comp & SDsampR)                        /* rear reflection */
443                  for (i = 0; i < NINCIDENT; i++) {
444                          get_ivector(ivec, i);
445                          put_mirror_arrow(ivec, -1);
446 <                        fname = tfile_name(brpref, dsuffix, i);
446 >                        cvt_sposition(sorg, ivec, -1);
447 >                        ivec[0] = -ivec[0]; ivec[1] = -ivec[1]; /* normal */
448                          sprintf(xfargs, "-s %f -t %f %f %f", bsdf_rad,
449 <                                        ivec[0]*sph_rad + sph_xoffset,
438 <                                        ivec[1]*sph_rad, ivec[2]*sph_rad);
449 >                                        sorg[0], sorg[1], sorg[2]);
450                          nxfa = 6;
451                          printf("\nvoid colorfunc scale_pat\n");
452                          printf("%d bsdf_red bsdf_grn bsdf_blu bsdf2rad.cal\n\t%s\n0\n0\n",
# Line 444 | Line 455 | put_BSDFs(void)
455                          SDcompXform(vMtx, ivec, Yaxis);
456                          nxfa = addrot(xfargs, vMtx[0], vMtx[1], vMtx[2]);
457                          sprintf(xfargs+strlen(xfargs), " -s %f -t %f %f %f",
458 <                                        scalef, ivec[0]*sph_rad + sph_xoffset,
448 <                                        ivec[1]*sph_rad, ivec[2]*sph_rad);
458 >                                        scalef, sorg[0], sorg[1], sorg[2]);
459                          nxfa += 6;
460                          fname = tfile_name(brpref, dsuffix, i);
461 <                        sprintf(cmdbuf, "gensurf scale_mat %s%d %s %s %s %d %d | xform -I -ry 180 -mx -my %s",
461 >                        sprintf(cmdbuf, "gensurf scale_mat %s%d %s %s %s %d %d | xform -I -ry 180 %s",
462                                          brpref, i+1, fname, fname, fname, SAMPRES-1, SAMPRES-1,
463                                          xfargs);
464                          if (!run_cmd(cmdbuf))
465                                  return(0);
466                  }
467 <        if (back_comp & SDsampT)
467 >        if (back_comp & SDsampT)                        /* rear transmission */
468                  for (i = 0; i < NINCIDENT; i++) {
469                          get_ivector(ivec, i);
470                          put_trans_arrow(ivec, -1);
471 <                        fname = tfile_name(btpref, dsuffix, i);
471 >                        cvt_sposition(sorg, ivec, -1);
472 >                        ivec[0] = -ivec[0]; ivec[1] = -ivec[1]; /* normal */
473                          sprintf(xfargs, "-s %f -t %f %f %f", bsdf_rad,
474 <                                        ivec[0]*sph_rad + sph_xoffset,
464 <                                        ivec[1]*sph_rad, ivec[2]*sph_rad);
474 >                                        sorg[0], sorg[1], sorg[2]);
475                          nxfa = 6;
476                          printf("\nvoid colorfunc scale_pat\n");
477                          printf("%d bsdf_red bsdf_grn bsdf_blu bsdf2rad.cal\n\t%s\n0\n0\n",
# Line 470 | Line 480 | put_BSDFs(void)
480                          SDcompXform(vMtx, ivec, Yaxis);
481                          nxfa = addrot(xfargs, vMtx[0], vMtx[1], vMtx[2]);
482                          sprintf(xfargs+strlen(xfargs), " -s %f -t %f %f %f",
483 <                                        scalef, ivec[0]*sph_rad + sph_xoffset,
474 <                                        ivec[1]*sph_rad, ivec[2]*sph_rad);
483 >                                        scalef, sorg[0], sorg[1], sorg[2]);
484                          nxfa += 6;
485                          fname = tfile_name(btpref, dsuffix, i);
486 <                        sprintf(cmdbuf, "gensurf scale_mat %s%d %s %s %s %d %d | xform -ry 180 -mx -my %s",
486 >                        sprintf(cmdbuf, "gensurf scale_mat %s%d %s %s %s %d %d | xform -ry 180 %s",
487                                          btpref, i+1, fname, fname, fname, SAMPRES-1, SAMPRES-1,
488                                          xfargs);
489                          if (!run_cmd(cmdbuf))

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines