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

Comparing ray/src/cv/mgf2rad.c (file contents):
Revision 2.29 by greg, Tue Feb 22 16:45:12 2011 UTC vs.
Revision 2.30 by greg, Sat Jan 25 18:02:06 2014 UTC

# Line 26 | Line 26 | double  emult = 1.;                    /* emitter multiplier */
26   FILE    *matfp;                         /* material output file */
27  
28  
29 < int r_comment(int ac, char **av);
30 < int r_cone(int ac, char **av);
31 < int r_cyl(int ac, char **av);
32 < int r_sph(int ac, char **av);
33 < int r_ring(int ac, char **av);
34 < int r_face(int ac, char **av);
35 < int r_ies(int ac, char **av);
36 < char * material(void);
37 < char * object(void);
38 < char * addarg(char *op, char *arg);
39 < void do_tri(char *mat, C_VERTEX *cv1, C_VERTEX *cv2, C_VERTEX *cv3, int iv);
40 < void cvtcolor(COLOR radrgb, register C_COLOR *ciec, double intensity);
29 > extern int r_comment(int ac, char **av);
30 > extern int r_cone(int ac, char **av);
31 > extern int r_cyl(int ac, char **av);
32 > extern int r_sph(int ac, char **av);
33 > extern int r_ring(int ac, char **av);
34 > extern int r_face(int ac, char **av);
35 > extern int r_ies(int ac, char **av);
36 > extern void putsided(char *mname);
37 > extern char * material(void);
38 > extern char * object(void);
39 > extern char * addarg(char *op, char *arg);
40 > extern void do_tri(char *mat, C_VERTEX *cv1, C_VERTEX *cv2, C_VERTEX *cv3, int iv);
41 > extern void cvtcolor(COLOR radrgb, register C_COLOR *ciec, double intensity);
42  
43  
44   int
# Line 484 | Line 485 | do_tri(                /* put out smoothed triangle */
485   }
486  
487  
488 + void
489 + putsided(char *mname)           /* print out mixfunc for sided material */
490 + {
491 +        fprintf(matfp, "\nvoid mixfunc %s\n", mname);
492 +        fprintf(matfp, "4 %s void if(Rdot,1,0) .\n0\n0\n", mname);
493 + }
494 +
495 +
496   char *
497   material(void)                  /* get (and print) current material */
498   {
# Line 546 | Line 555 | material(void)                 /* get (and print) current material *
555                  }
556                                          /* check for trans */
557          if (c_cmaterial->td > .01 || c_cmaterial->ts > .01) {
558 <                double  ts, a5, a6;
550 <
551 <                if (c_cmaterial->sided) {
552 <                        ts = sqrt(c_cmaterial->ts);     /* approximate */
553 <                        a5 = .5;
554 <                } else {
555 <                        ts = c_cmaterial->ts;
556 <                        a5 = 1.;
557 <                }
558 >                double  a5, a6;
559                                                  /* average colors */
560 <                d = c_cmaterial->rd + c_cmaterial->td + ts;
560 >                d = c_cmaterial->rd + c_cmaterial->td + c_cmaterial->ts;
561                  cvtcolor(radrgb, &c_cmaterial->rd_c, c_cmaterial->rd/d);
562                  cvtcolor(c2, &c_cmaterial->td_c, c_cmaterial->td/d);
563                  addcolor(radrgb, c2);
564 <                cvtcolor(c2, &c_cmaterial->ts_c, ts/d);
564 >                cvtcolor(c2, &c_cmaterial->ts_c, c_cmaterial->ts/d);
565                  addcolor(radrgb, c2);
566 <                if (c_cmaterial->rs + ts > .0001)
566 >                if (c_cmaterial->rs + c_cmaterial->ts > .0001)
567                          a5 = (c_cmaterial->rs*c_cmaterial->rs_a +
568 <                                        ts*a5*c_cmaterial->ts_a) /
569 <                                        (c_cmaterial->rs + ts);
570 <                a6 = (c_cmaterial->td + ts) /
571 <                                (c_cmaterial->rd + c_cmaterial->td + ts);
568 >                                        c_cmaterial->ts*c_cmaterial->ts_a) /
569 >                                        (c_cmaterial->rs + c_cmaterial->ts);
570 >                a6 = (c_cmaterial->td + c_cmaterial->ts) /
571 >                                (c_cmaterial->rd + c_cmaterial->td + c_cmaterial->ts);
572                  if (a6 < .999)
573                          d = c_cmaterial->rd/(1. - c_cmaterial->rs)/(1. - a6);
574                  else
575 <                        d = c_cmaterial->td + ts;
575 >                        d = c_cmaterial->td + c_cmaterial->ts;
576                  scalecolor(radrgb, d);
577                  fprintf(matfp, "\nvoid trans %s\n0\n0\n", mname);
578                  fprintf(matfp, "7 %f %f %f\n", colval(radrgb,RED),
579                                  colval(radrgb,GRN), colval(radrgb,BLU));
580                  fprintf(matfp, "\t%f %f %f %f\n", c_cmaterial->rs, a5, a6,
581 <                                ts/(ts + c_cmaterial->td));
581 >                                c_cmaterial->ts/(c_cmaterial->ts + c_cmaterial->td));
582 >                if (c_cmaterial->sided)
583 >                        putsided(mname);
584                  return(mname);
585          }
586                                          /* check for plastic */
# Line 588 | Line 591 | material(void)                 /* get (and print) current material *
591                  fprintf(matfp, "5 %f %f %f %f %f\n", colval(radrgb,RED),
592                                  colval(radrgb,GRN), colval(radrgb,BLU),
593                                  c_cmaterial->rs, c_cmaterial->rs_a);
594 +                if (c_cmaterial->sided)
595 +                        putsided(mname);
596                  return(mname);
597          }
598                                          /* else it's metal */
# Line 600 | Line 605 | material(void)                 /* get (and print) current material *
605                          colval(radrgb,GRN), colval(radrgb,BLU),
606                          c_cmaterial->rs/(c_cmaterial->rd + c_cmaterial->rs),
607                          c_cmaterial->rs_a);
608 +        if (c_cmaterial->sided)
609 +                putsided(mname);
610          return(mname);
611   }
612  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines