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.27 by schorsch, Sun Jul 27 22:12:01 2003 UTC vs.
Revision 2.30 by greg, Sat Jan 25 18:02:06 2014 UTC

# Line 9 | Line 9 | static const char      RCSid[] = "$Id$";
9   #include <stdlib.h>
10   #include <math.h>
11   #include <string.h>
12 < #include "mgflib/parser.h"
12 >
13 > #include "platform.h"
14 > #include "mgf_parser.h"
15   #include "color.h"
16   #include "tmesh.h"
17  
# Line 23 | Line 25 | double  emult = 1.;                    /* emitter multiplier */
25  
26   FILE    *matfp;                         /* material output file */
27  
26 int     r_comment(), r_cone(), r_cyl(), r_face(), r_ies(), r_ring(), r_sph();
27 char    *material(), *object(), *addarg();
28  
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 < main(argc, argv)                /* convert files to stdout */
44 < int     argc;
45 < char    *argv[];
43 >
44 > int
45 > main(
46 >        int     argc,
47 >        char    *argv[]
48 > )
49   {
50          int     i;
51  
# Line 120 | Line 136 | userr:
136  
137  
138   int
139 < r_comment(ac, av)               /* repeat a comment verbatim */
140 < register int    ac;
141 < register char   **av;
139 > r_comment(              /* repeat a comment verbatim */
140 >        register int    ac,
141 >        register char   **av
142 > )
143   {
144          putchar('#');           /* use Radiance comment character */
145          while (--ac) {                  /* pass through verbatim */
# Line 135 | Line 152 | register char  **av;
152  
153  
154   int
155 < r_cone(ac, av)                  /* put out a cone */
156 < int     ac;
157 < char    **av;
155 > r_cone(                 /* put out a cone */
156 >        int     ac,
157 >        char    **av
158 > )
159   {
160          static int      ncones;
161          char    *mat;
# Line 183 | Line 201 | char   **av;
201  
202  
203   int
204 < r_cyl(ac, av)                   /* put out a cylinder */
205 < int     ac;
206 < char    **av;
204 > r_cyl(                  /* put out a cylinder */
205 >        int     ac,
206 >        char    **av
207 > )
208   {
209          static int      ncyls;
210          char    *mat;
# Line 221 | Line 240 | char   **av;
240  
241  
242   int
243 < r_sph(ac, av)                   /* put out a sphere */
244 < int     ac;
245 < char    **av;
243 > r_sph(                  /* put out a sphere */
244 >        int     ac,
245 >        char    **av
246 > )
247   {
248          static int      nsphs;
249          char    *mat;
# Line 254 | Line 274 | char   **av;
274  
275  
276   int
277 < r_ring(ac, av)                  /* put out a ring */
278 < int     ac;
279 < char    **av;
277 > r_ring(                 /* put out a ring */
278 >        int     ac,
279 >        char    **av
280 > )
281   {
282          static int      nrings;
283          char    *mat;
# Line 291 | Line 312 | char   **av;
312  
313  
314   int
315 < r_face(ac, av)                  /* convert a face */
316 < int     ac;
317 < char    **av;
315 > r_face(                 /* convert a face */
316 >        int     ac,
317 >        char    **av
318 > )
319   {
320          static int      nfaces;
321          int             myi = invert;
# Line 301 | Line 323 | char   **av;
323          register int    i;
324          register C_VERTEX       *cv;
325          FVECT   v;
326 <        int     rv;
326 >
327                                          /* check argument count and type */
328          if (ac < 4)
329                  return(MG_EARGC);
# Line 350 | Line 372 | char   **av;
372  
373  
374   int
375 < r_ies(ac, av)                           /* convert an IES luminaire file */
376 < int     ac;
377 < char    **av;
375 > r_ies(                          /* convert an IES luminaire file */
376 >        int     ac,
377 >        char    **av
378 > )
379   {
380          int     xa0 = 2;
381          char    combuf[128];
# Line 414 | Line 437 | char   **av;
437   }
438  
439  
440 < do_tri(mat, cv1, cv2, cv3, iv)          /* put out smoothed triangle */
441 < char    *mat;
442 < C_VERTEX        *cv1, *cv2, *cv3;
443 < int     iv;
440 > void
441 > do_tri(         /* put out smoothed triangle */
442 >        char    *mat,
443 >        C_VERTEX        *cv1,
444 >        C_VERTEX        *cv2,
445 >        C_VERTEX        *cv3,
446 >        int     iv
447 > )
448   {
449          static int      ntris;
450          BARYCCM bvecs;
# Line 458 | Line 485 | int    iv;
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()                      /* get (and print) current material */
497 > material(void)                  /* get (and print) current material */
498   {
499          char    *mname = "mat";
500          COLOR   radrgb, c2;
501          double  d;
467        register int    i;
502  
503          if (c_cmname != NULL)
504                  mname = c_cmname;
# Line 521 | Line 555 | material()                     /* 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;
525 <
526 <                if (c_cmaterial->sided) {
527 <                        ts = sqrt(c_cmaterial->ts);     /* approximate */
528 <                        a5 = .5;
529 <                } else {
530 <                        ts = c_cmaterial->ts;
531 <                        a5 = 1.;
532 <                }
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 563 | Line 591 | material()                     /* 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 575 | Line 605 | material()                     /* 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  
613  
614 < cvtcolor(radrgb, ciec, intensity)       /* convert a CIE XYZ color to RGB */
615 < COLOR   radrgb;
616 < register C_COLOR        *ciec;
617 < double  intensity;
614 > void
615 > cvtcolor(       /* convert a CIE XYZ color to RGB */
616 >        COLOR   radrgb,
617 >        register C_COLOR        *ciec,
618 >        double  intensity
619 > )
620   {
621          static COLOR    ciexyz;
622  
# Line 595 | Line 629 | double intensity;
629  
630  
631   char *
632 < object()                        /* return current object name */
632 > object(void)                    /* return current object name */
633   {
634          static char     objbuf[64];
635          register int    i;
# Line 617 | Line 651 | object()                       /* return current object name */
651  
652  
653   char *
654 < addarg(op, arg)                         /* add argument and advance pointer */
655 < register char   *op, *arg;
654 > addarg(                         /* add argument and advance pointer */
655 >        register char *op,
656 >        register char *arg
657 > )
658   {
659          *op = ' ';
660          while ( (*++op = *arg++) )

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines