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

Comparing ray/src/cv/rad2mgf.c (file contents):
Revision 2.1 by greg, Thu Jul 7 17:30:33 1994 UTC vs.
Revision 2.12 by greg, Wed May 10 19:46:05 1995 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1994 Regents of the University of California */
1 > /* Copyright (c) 1995 Regents of the University of California */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
# Line 9 | Line 9 | static char SCCSid[] = "$SunId$ LBL";
9   */
10  
11   #include <stdio.h>
12 + #include <math.h>
13 + #include <ctype.h>
14   #include <string.h>
15   #include "fvect.h"
16   #include "object.h"
17   #include "color.h"
18   #include "lookup.h"
19  
20 + #define PI      3.14159265358979323846
21 +
22 + #define C_1SIDEDTHICK   0.005
23 +
24   int     o_face(), o_cone(), o_sphere(), o_ring(), o_cylinder();
25 < int     o_instance(), o_source(), o_illum();
26 < int     o_plastic(), o_metal(), o_glass(), o_mirror(), o_trans(), o_light();
25 > int     o_instance(), o_illum();
26 > int     o_plastic(), o_metal(), o_glass(), o_dielectric(),
27 >        o_mirror(), o_trans(), o_light();
28  
29   extern void     free();
30   extern char     *malloc();
# Line 26 | Line 33 | LUTAB  rmats = LU_SINIT(free,NULL);            /* defined materia
33  
34   LUTAB   rdispatch = LU_SINIT(NULL,NULL);        /* function dispatch table */
35  
36 < char    curmat[80];             /* current material */
36 > char    curmat[80];                             /* current material */
37 > char    curobj[128] = "Untitled";               /* current object name */
38  
39 < double  unit_mult = 1.;         /* units multiplier */
39 > double  unit_mult = 1.;                         /* units multiplier */
40  
41 + #define hasmult         (unit_mult < .999 || unit_mult > 1.001)
42  
43 + /*
44 + * Stuff for tracking and reusing vertices:
45 + */
46 +
47 + char    VKFMT[] = "%+16.9e %+16.9e %+16.9e";
48 + #define VKLEN           64
49 +
50 + #define mkvkey(k,v)     sprintf(k, VKFMT, (v)[0], (v)[1], (v)[2])
51 +
52 + #define NVERTS          256
53 +
54 + long    vclock;         /* incremented at each vertex request */
55 +
56 + struct vert {
57 +        long    lused;          /* when last used (0 if unassigned) */
58 +        FVECT   p;              /* track point position only */
59 + } vert[NVERTS];         /* our vertex cache */
60 +
61 + LUTAB   vertab = LU_SINIT(free,NULL);   /* our vertex lookup table */
62 +
63 +
64   main(argc, argv)
65   int     argc;
66   char    **argv;
# Line 57 | Line 87 | char   **argv;
87                                  goto unkopt;
88                          }
89                          break;
90 +                default:
91 +                        goto unkopt;
92                  }
93          init();
94          if (i >= argc)
# Line 85 | Line 117 | char   *inp;
117          register int    c;
118  
119          if (inp == NULL) {
120 <                inp = "the standard input";
120 >                inp = "standard input";
121                  fp = stdin;
122          } else if (inp[0] == '!') {
123                  if ((fp = popen(inp+1, "r")) == NULL) {
# Line 163 | Line 195 | FUNARGS        *fa;
195                          fprintf(stderr, "%s: bad %s \"%s\"\n", typ, id);
196                          exit(1);
197                  }
198 <        } else if (lu_find(&rmats, mod)->data != NULL)  /* make alias */
199 <                newmat(id, mod);
198 >        } else {                                        /* unsupported */
199 >                o_unsupported(mod, typ, id, fa);
200 >                if (lu_find(&rmats, mod)->data != NULL) /* make alias */
201 >                        newmat(id, mod);
202 >        }
203   }
204  
205  
# Line 209 | Line 244 | char   *id;
244   {
245          if (!strcmp(id, curmat))        /* already set? */
246                  return;
247 +        if (!strcmp(id, VOIDID))        /* cannot set */
248 +                return;
249          printf("m %s\n", id);
250          strcpy(curmat, id);
251   }
252  
253  
254 + setobj(id)                      /* set object name to this one */
255 + char    *id;
256 + {
257 +        register char   *cp, *cp2;
258 +        char    *end = NULL;
259 +        int     diff = 0;
260 +                                /* use all but final suffix */
261 +        for (cp = id; *cp; cp++)
262 +                if (*cp == '.')
263 +                        end = cp;
264 +        if (end == NULL)
265 +                end = cp;
266 +                                /* copy to current object */
267 +        cp2 = curobj;
268 +        if (!isalpha(*id)) {    /* start with letter */
269 +                diff = *cp2 != 'O';
270 +                *cp2++ = 'O';
271 +        }
272 +        for (cp = id; cp < end; *cp2++ = *cp++) {
273 +                if (*cp < '!' | *cp > '~')      /* limit to visible chars */
274 +                        *cp = '?';
275 +                diff += *cp != *cp2;
276 +        }
277 +        if (!diff && !*cp2)
278 +                return;
279 +        *cp2 = '\0';
280 +        fputs("o\no ", stdout);
281 +        puts(curobj);
282 + }
283 +
284 +
285   init()                  /* initialize dispatch table and output */
286   {
287 +        lu_init(&vertab, NVERTS);
288          lu_init(&rdispatch, 22);
289          add2dispatch("polygon", o_face);
290          add2dispatch("cone", o_cone);
# Line 231 | Line 300 | init()                 /* initialize dispatch table and output */
300          add2dispatch("metal", o_metal);
301          add2dispatch("metal2", o_metal);
302          add2dispatch("glass", o_glass);
303 +        add2dispatch("dielectric", o_dielectric);
304          add2dispatch("trans", o_trans);
305          add2dispatch("trans2", o_trans);
306          add2dispatch("mirror", o_mirror);
# Line 238 | Line 308 | init()                 /* initialize dispatch table and output */
308          add2dispatch("spotlight", o_light);
309          add2dispatch("glow", o_light);
310          add2dispatch("illum", o_illum);
311 <        puts("# The following was converted from Radiance scene input");
312 <        if (unit_mult < .999 || unit_mult > 1.001)
311 >        puts("# The following was converted from RADIANCE scene input");
312 >        if (hasmult)
313                  printf("xf -s %.4e\n", unit_mult);
314 +        printf("o %s\n", curobj);
315   }
316  
317  
318   uninit()                        /* mark end of MGF file */
319   {
320 <        if (unit_mult < .999 || unit_mult > 1.001)
320 >        puts("o");
321 >        if (hasmult)
322                  puts("xf");
323 <        puts("# End of data converted from Radiance scene input");
323 >        puts("# End of data converted from RADIANCE scene input");
324          lu_done(&rdispatch);
325          lu_done(&rmats);
326 +        lu_done(&vertab);
327   }
328  
329  
330 + clrverts()                      /* clear vertex table */
331 + {
332 +        register int    i;
333 +
334 +        lu_done(&vertab);
335 +        for (i = 0; i < NVERTS; i++)
336 +                vert[i].lused = 0;
337 +        lu_init(&vertab, NVERTS);
338 + }
339 +
340 +
341   add2dispatch(name, func)        /* add function to dispatch table */
342   char    *name;
343   int     (*func)();
# Line 271 | Line 355 | int    (*func)();
355   }
356  
357  
274 char    VKFMT[] = "%+1.9e %+1.9e %+1.9e";
275 #define VKLEN           64
276
277 #define mkvkey(k,v)     sprintf(k, VKFMT, (v)[0], (v)[1], (v)[2])
278
279 #define NVERTS          256
280
281 long    clock;          /* incremented at each vertex request */
282
283 struct vert {
284        long    lused;          /* when last used (0 if unassigned) */
285        FVECT   p;              /* track point position only */
286 } vert[NVERTS];
287
288 LUTAB   vertab = LU_SINIT(free,NULL);   /* our vertex lookup table */
289
290
358   char *
359 < getvertid(vp)                   /* get/set vertex ID for this point */
359 > getvertid(vname, vp)            /* get/set vertex ID for this point */
360 > char    *vname;
361   FVECT   vp;
362   {
363 <        static char     vname[6];
296 <        char    vkey[VKLEN];
363 >        static char     vkey[VKLEN];
364          register LUENT  *lp;
365          register int    i, vndx;
366  
367 <        if (!vertab.tsiz && !lu_init(&vertab, NVERTS))
301 <                goto memerr;
302 <        clock++;                        /* increment counter */
367 >        vclock++;                       /* increment counter */
368          mkvkey(vkey, vp);
369          if ((lp = lu_find(&vertab, vkey)) == NULL)
370                  goto memerr;
# Line 319 | Line 384 | FVECT  vp;
384                          mkvkey(vkey, vert[vndx].p);
385                          lu_delete(&vertab, vkey);
386                  }
387 <                vert[vndx].lused = clock;                       /* assign it */
388 <                VCOPY(vert[vndx].p, vp);
324 <                printf("v v%d =\np %.15g %.15g %.15g\n",        /* print it */
387 >                VCOPY(vert[vndx].p, vp);                        /* assign it */
388 >                printf("v v%d =\n\tp %.15g %.15g %.15g\n",      /* print it */
389                                  vndx, vp[0], vp[1], vp[2]);
390                  lp->data = (char *)&vert[vndx];                 /* set it */
391          } else
392                  vndx = (struct vert *)lp->data - vert;
393 +        vert[vndx].lused = vclock;              /* record this use */
394          sprintf(vname, "v%d", vndx);
395          return(vname);
396   memerr:
# Line 335 | Line 400 | memerr:
400  
401  
402   int
403 + o_unsupported(mod, typ, id, fa)         /* mark unsupported primitive */
404 + char    *mod, *typ, *id;
405 + FUNARGS *fa;
406 + {
407 +        register int    i;
408 +
409 +        fputs("\n# Unsupported RADIANCE primitive:\n", stdout);
410 +        printf("# %s %s %s", mod, typ, id);
411 +        printf("\n# %d", fa->nsargs);
412 +        for (i = 0; i < fa->nsargs; i++)
413 +                printf(" %s", fa->sarg[i]);
414 + #ifdef IARGS
415 +        printf("\n# %d", fa->niargs);
416 +        for (i = 0; i < fa->niargs; i++)
417 +                printf(" %ld", fa->iarg[i]);
418 + #else
419 +        fputs("\n# 0", stdout);
420 + #endif
421 +        printf("\n# %d", fa->nfargs);
422 +        for (i = 0; i < fa->nfargs; i++)
423 +                printf(" %g", fa->farg[i]);
424 +        fputs("\n\n", stdout);
425 +        return(0);
426 + }
427 +
428 +
429 + int
430   o_face(mod, typ, id, fa)                /* print out a polygon */
431   char    *mod, *typ, *id;
432   FUNARGS *fa;
433   {
434          char    entbuf[512];
435 <        register char   *cp1, *cp2;
435 >        register char   *cp;
436          register int    i;
437  
438          if (fa->nfargs < 9 | fa->nfargs % 3)
439                  return(-1);
440          setmat(mod);
441 <        printf("o %s\n", id);
442 <        cp1 = entbuf;
443 <        *cp1++ = 'f';
441 >        setobj(id);
442 >        cp = entbuf;
443 >        *cp++ = 'f';
444          for (i = 0; i < fa->nfargs; i += 3) {
445 <                cp2 = getvertid(fa->farg + i);
446 <                *cp1++ = ' ';
447 <                while ((*cp1 = *cp2++))
448 <                        cp1++;
445 >                *cp++ = ' ';
446 >                getvertid(cp, fa->farg + i);
447 >                while (*cp)
448 >                        cp++;
449          }
450          puts(entbuf);
359        puts("o");
451          return(0);
452   }
453  
# Line 366 | Line 457 | o_cone(mod, typ, id, fa)       /* print out a cone */
457   char    *mod, *typ, *id;
458   register FUNARGS        *fa;
459   {
460 +        char    v1[6], v2[6];
461 +
462          if (fa->nfargs != 8)
463                  return(-1);
464          setmat(mod);
465 <        printf("o %s\n", id);
466 <        printf("v cv1 =\np %.12g %.12g %.12g\n",
467 <                        fa->farg[0], fa->farg[1], fa->farg[2]);
375 <        printf("v cv2 =\np %.12g %.12g %.12g\n",
376 <                        fa->farg[3], fa->farg[4], fa->farg[5]);
465 >        setobj(id);
466 >        getvertid(v1, fa->farg);
467 >        getvertid(v2, fa->farg + 3);
468          if (typ[1] == 'u')                      /* cup -> inverted cone */
469 <                printf("cone cv1 %.12g cv2 %.12g\n",
470 <                                -fa->farg[6], -fa->farg[7]);
469 >                printf("cone %s %.12g %s %.12g\n",
470 >                                v1, -fa->farg[6], v2, -fa->farg[7]);
471          else
472 <                printf("cone cv1 %.12g cv2 %.12g\n",
473 <                                fa->farg[6], fa->farg[7]);
383 <        puts("o");
472 >                printf("cone %s %.12g %s %.12g\n",
473 >                                v1, fa->farg[6], v2, fa->farg[7]);
474          return(0);
475   }
476  
# Line 390 | Line 480 | o_sphere(mod, typ, id, fa)     /* print out a sphere */
480   char    *mod, *typ, *id;
481   register FUNARGS        *fa;
482   {
483 +        char    cent[6];
484 +
485          if (fa->nfargs != 4)
486                  return(-1);
487          setmat(mod);
488 <        printf("o %s\n", id);
489 <        printf("v cent =\np %.12g %.12g %.12g\n",
490 <                        fa->farg[0], fa->farg[1], fa->farg[2]);
399 <        printf("sph cent %.12g\n", typ[0]=='b' ? -fa->farg[3] : fa->farg[3]);
400 <        puts("o");
488 >        setobj(id);
489 >        printf("sph %s %.12g\n", getvertid(cent, fa->farg),
490 >                        typ[0]=='b' ? -fa->farg[3] : fa->farg[3]);
491          return(0);
492   }
493  
# Line 407 | Line 497 | o_cylinder(mod, typ, id, fa)   /* print out a cylinder *
497   char    *mod, *typ, *id;
498   register FUNARGS        *fa;
499   {
500 +        char    v1[6], v2[6];
501 +
502          if (fa->nfargs != 7)
503                  return(-1);
504          setmat(mod);
505 <        printf("o %s\n", id);
506 <        printf("v cv1 =\np %.12g %.12g %.12g\n",
507 <                        fa->farg[0], fa->farg[1], fa->farg[2]);
508 <        printf("v cv2 =\np %.12g %.12g %.12g\n",
509 <                        fa->farg[3], fa->farg[4], fa->farg[5]);
418 <        printf("cyl cv1 %.12g cv2\n",
419 <                        typ[0]=='t' ? -fa->farg[6] : fa->farg[6]);
420 <        puts("o");
505 >        setobj(id);
506 >        getvertid(v1, fa->farg);
507 >        getvertid(v2, fa->farg + 3);
508 >        printf("cyl %s %.12g %s\n", v1,
509 >                        typ[0]=='t' ? -fa->farg[6] : fa->farg[6], v2);
510          return(0);
511   }
512  
# Line 430 | Line 519 | register FUNARGS       *fa;
519          if (fa->nfargs != 8)
520                  return(-1);
521          setmat(mod);
522 <        printf("o %s\n", id);
523 <        printf("v cent =\np %.12g %.12g %.12g\n",
522 >        setobj(id);
523 >        printf("v cent =\n\tp %.12g %.12g %.12g\n",
524                          fa->farg[0], fa->farg[1], fa->farg[2]);
525 <        printf("n %.12g %.12g %.12g\n",
525 >        printf("\tn %.12g %.12g %.12g\n",
526                          fa->farg[3], fa->farg[4], fa->farg[5]);
527          if (fa->farg[6] < fa->farg[7])
528                  printf("ring cent %.12g %.12g\n",
# Line 441 | Line 530 | register FUNARGS       *fa;
530          else
531                  printf("ring cent %.12g %.12g\n",
532                                  fa->farg[7], fa->farg[6]);
444        puts("o");
533          return(0);
534   }
535  
# Line 451 | Line 539 | o_instance(mod, typ, id, fa)   /* convert an instance */
539   char    *mod, *typ, *id;
540   FUNARGS *fa;
541   {
542 <        return(0);              /* this is too damned difficult! */
542 >        register int    i;
543 >        register char   *cp;
544 >        char    *start = NULL, *end = NULL;
545 >        /*
546 >         * We don't really know how to do this, so we just create
547 >         * a reference to an undefined MGF file and it's the user's
548 >         * responsibility to create this file and put the appropriate
549 >         * stuff into it.
550 >         */
551 >        if (fa->nsargs < 1)
552 >                return(-1);
553 >        setmat(mod);                    /* only works if surfaces are void */
554 >        setobj(id);
555 >        for (cp = fa->sarg[0]; *cp; cp++)       /* construct MGF file name */
556 >                if (*cp == '/')
557 >                        start = cp+1;
558 >                else if (*cp == '.')
559 >                        end = cp;
560 >        if (start == NULL)
561 >                start = fa->sarg[0];
562 >        if (end == NULL || start >= end)
563 >                end = cp;
564 >        fputs("i ", stdout);                    /* print include entity */
565 >        for (cp = start; cp < end; cp++)
566 >                putchar(*cp);
567 >        fputs(".mgf", stdout);                  /* add MGF suffix */
568 >        for (i = 1; i < fa->nsargs; i++) {      /* add transform */
569 >                putchar(' ');
570 >                fputs(fa->sarg[i], stdout);
571 >        }
572 >        putchar('\n');
573 >        clrverts();                     /* vertex id's no longer reliable */
574 >        return(0);
575   }
576  
577  
578   int
459 o_source(mod, typ, id, fa)      /* convert a source */
460 char    *mod, *typ, *id;
461 FUNARGS *fa;
462 {
463        return(0);              /* there is no MGF equivalent! */
464 }
465
466
467 int
579   o_illum(mod, typ, id, fa)       /* convert an illum material */
580   char    *mod, *typ, *id;
581   FUNARGS *fa;
# Line 475 | Line 586 | FUNARGS        *fa;
586          }
587                                          /* else create invisible material */
588          newmat(id, NULL);
589 <        puts("ts 1 0");
589 >        puts("\tts 1 0");
590          return(0);
591   }
592  
# Line 493 | Line 604 | register FUNARGS       *fa;
604          newmat(id, NULL);
605          rrgb[0] = fa->farg[0]; rrgb[1] = fa->farg[1]; rrgb[2] = fa->farg[2];
606          rgb_cie(cxyz, rrgb);
607 <        puts("c");                              /* put diffuse component */
607 >        puts("\tc");                            /* put diffuse component */
608          d = cxyz[0] + cxyz[1] + cxyz[2];
609          if (d > FTINY)
610 <                printf("cxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
611 <        printf("rd %.4f\n", cxyz[1]*(1. - fa->farg[3]));
612 <        puts("c");                              /* put specular component */
613 <        printf("rs %.4f %.4f\n", fa->farg[3],
614 <                        typ[7]=='2' ? .5*(fa->farg[4] + fa->farg[5]) :
615 <                                        fa->farg[4]);
610 >                printf("\t\tcxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
611 >        printf("\trd %.4f\n", cxyz[1]*(1. - fa->farg[3]));
612 >        if (fa->farg[3] > FTINY) {              /* put specular component */
613 >                puts("\tc");
614 >                printf("\trs %.4f %.4f\n", fa->farg[3],
615 >                                typ[7]=='2' ? .5*(fa->farg[4] + fa->farg[5]) :
616 >                                                fa->farg[4]);
617 >        }
618          return(0);
619   }
620  
# Line 519 | Line 632 | register FUNARGS       *fa;
632          newmat(id, NULL);
633          rrgb[0] = fa->farg[0]; rrgb[1] = fa->farg[1]; rrgb[2] = fa->farg[2];
634          rgb_cie(cxyz, rrgb);
635 <        puts("c");                              /* put diffuse component */
635 >        puts("\tc");                            /* put diffuse component */
636          d = cxyz[0] + cxyz[1] + cxyz[2];
637          if (d > FTINY)
638 <                printf("cxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
639 <        printf("rd %.4f\n", cxyz[1]*(1. - fa->farg[3]));
638 >                printf("\t\tcxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
639 >        printf("\trd %.4f\n", cxyz[1]*(1. - fa->farg[3]));
640                                                  /* put specular component */
641 <        printf("rs %.4f %.4f\n", cxyz[1]*fa->farg[3],
641 >        printf("\trs %.4f %.4f\n", cxyz[1]*fa->farg[3],
642                          typ[5]=='2' ? .5*(fa->farg[4] + fa->farg[5]) :
643                                          fa->farg[4]);
644          return(0);
# Line 546 | Line 659 | register FUNARGS       *fa;
659          newmat(id, NULL);
660          if (fa->nfargs == 4)
661                  nrfr = fa->farg[3];
662 +        printf("\tir %f 0\n", nrfr);
663          F = (1. - nrfr)/(1. + nrfr);            /* use normal incidence */
664          F *= F;
665          for (i = 0; i < 3; i++) {
666 <                rrgb[i] = (1. - F)*(1. - F)/(1. - F*F*fa->farg[i]*fa->farg[i]);
553 <                trgb[i] = F * (1. + (1. - 2.*F)*fa->farg[i]) /
666 >                trgb[i] = fa->farg[i] * (1. - F)*(1. - F) /
667                                  (1. - F*F*fa->farg[i]*fa->farg[i]);
668 +                rrgb[i] = F * (1. + (1. - 2.*F)*fa->farg[i]) /
669 +                                (1. - F*F*fa->farg[i]*fa->farg[i]);
670          }
671          rgb_cie(cxyz, rrgb);                    /* put reflected component */
672 <        puts("c");
672 >        puts("\tc");
673          d = cxyz[0] + cxyz[1] + cxyz[2];
674          if (d > FTINY)
675 <                printf("cxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
676 <        printf("rs %.4f 0\n", cxyz[1]);
675 >                printf("\t\tcxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
676 >        printf("\trs %.4f 0\n", cxyz[1]);
677          rgb_cie(cxyz, trgb);                    /* put transmitted component */
678 <        puts("c");
678 >        puts("\tc");
679          d = cxyz[0] + cxyz[1] + cxyz[2];
680          if (d > FTINY)
681 <                printf("cxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
682 <        printf("ts %.4f 0\n", cxyz[1]);
681 >                printf("\t\tcxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
682 >        printf("\tts %.4f 0\n", cxyz[1]);
683          return(0);
684   }
685  
686  
687   int
688 + o_dielectric(mod, typ, id, fa)  /* convert a dielectric material */
689 + char    *mod, *typ, *id;
690 + register FUNARGS        *fa;
691 + {
692 +        COLOR   cxyz, trgb;
693 +        double  F, d;
694 +        register int    i;
695 +
696 +        if (fa->nfargs != 5)
697 +                return(-1);
698 +        newmat(id, NULL);
699 +        F = (1. - fa->farg[3])/(1. + fa->farg[3]);      /* normal incidence */
700 +        F *= F;
701 +        for (i = 0; i < 3; i++)
702 +                trgb[i] = (1. - F)*pow(fa->farg[i], C_1SIDEDTHICK/unit_mult);
703 +        printf("\tir %f 0\n", fa->farg[3]);     /* put index of refraction */
704 +        printf("\tsides 1\n");
705 +        puts("\tc");                            /* put reflected component */
706 +        printf("\trs %.4f 0\n", F);
707 +        rgb_cie(cxyz, trgb);                    /* put transmitted component */
708 +        puts("\tc");
709 +        d = cxyz[0] + cxyz[1] + cxyz[2];
710 +        if (d > FTINY)
711 +                printf("\t\tcxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
712 +        printf("\tts %.4f 0\n", cxyz[1]);
713 +        return(0);
714 + }
715 +
716 +
717 + int
718   o_mirror(mod, typ, id, fa)      /* convert a mirror material */
719   char    *mod, *typ, *id;
720   register FUNARGS        *fa;
# Line 586 | Line 731 | register FUNARGS       *fa;
731          newmat(id, NULL);
732          rrgb[0] = fa->farg[0]; rrgb[1] = fa->farg[1]; rrgb[2] = fa->farg[2];
733          rgb_cie(cxyz, rrgb);
734 <        puts("c");                              /* put specular component */
734 >        puts("\tc");                            /* put specular component */
735          d = cxyz[0] + cxyz[1] + cxyz[2];
736          if (d > FTINY)
737 <                printf("cxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
738 <        printf("rs %.4f 0\n", cxyz[1]);
737 >                printf("\t\tcxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
738 >        printf("\trs %.4f 0\n", cxyz[1]);
739          return(0);
740   }
741  
# Line 619 | Line 764 | register FUNARGS       *fa;
764          newmat(id, NULL);
765          rrgb[0] = fa->farg[0]; rrgb[1] = fa->farg[1]; rrgb[2] = fa->farg[2];
766          rgb_cie(cxyz, rrgb);
767 <        puts("c");                              /* put transmitted diffuse */
767 >        puts("\tc");                            /* put transmitted diffuse */
768          d = cxyz[0] + cxyz[1] + cxyz[2];
769          if (d > FTINY)
770 <                printf("cxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
771 <        printf("td %.4f\n", cxyz[1]*trans*(1. - fa->farg[3])*(1. - tspec));
770 >                printf("\t\tcxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
771 >        printf("\ttd %.4f\n", cxyz[1]*trans*(1. - fa->farg[3])*(1. - tspec));
772                                                  /* put transmitted specular */
773 <        printf("ts %.4f %.4f\n", cxyz[1]*trans*tspec*(1. - fa->farg[3]), rough);
773 >        printf("\tts %.4f %.4f\n", cxyz[1]*trans*tspec*(1. - fa->farg[3]), rough);
774                                                  /* put reflected diffuse */
775 <        printf("rd %.4f\n", cxyz[1]*(1. - fa->farg[3])*(1. - trans));
776 <        puts("c");                              /* put reflected specular */
777 <        printf("rs %.4f %.4f\n", fa->farg[3], rough);
775 >        printf("\trd %.4f\n", cxyz[1]*(1. - fa->farg[3])*(1. - trans));
776 >        puts("\tc");                            /* put reflected specular */
777 >        printf("\trs %.4f %.4f\n", fa->farg[3], rough);
778          return(0);
779   }
780  
# Line 648 | Line 793 | register FUNARGS       *fa;
793          rrgb[0] = fa->farg[0]; rrgb[1] = fa->farg[1]; rrgb[2] = fa->farg[2];
794          rgb_cie(cxyz, rrgb);
795          d = cxyz[0] + cxyz[1] + cxyz[2];
796 <        puts("c");
796 >        puts("\tc");
797          if (d > FTINY)
798 <                printf("cxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
799 <        printf("ed %.4g\n", cxyz[1]);
798 >                printf("\t\tcxy %.4f %.4f\n", cxyz[0]/d, cxyz[1]/d);
799 >        printf("\ted %.4g\n", cxyz[1]*(PI*WHTEFFICACY));
800          return(0);
801   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines