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

Comparing ray/src/cv/obj2rad.c (file contents):
Revision 2.16 by greg, Wed Jul 24 13:07:41 1996 UTC vs.
Revision 2.20 by schorsch, Thu Jun 26 00:58:09 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1994 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   * Convert a Wavefront .obj file to Radiance format.
6   *
# Line 32 | Line 29 | FVECT  *vlist;                 /* our vertex list */
29   int     nvs;                    /* number of vertices in our list */
30   FVECT   *vnlist;                /* vertex normal list */
31   int     nvns;
32 < FLOAT   (*vtlist)[2];           /* map vertex list */
32 > RREAL   (*vtlist)[2];           /* map vertex list */
33   int     nvts;
34  
35   typedef int     VNDX[3];        /* vertex index (point,map,normal) */
# Line 473 | Line 470 | register int   ac;
470   register char   **av;
471   {
472          VNDX    vi;
473 <        FLOAT   *p0, *p1;
473 >        RREAL   *p0, *p1;
474          FVECT   v1, v2, nsum, newn;
475          double  d;
476          register int    i;
# Line 558 | Line 555 | char   *v1, *v2, *v3;
555          char    *mod;
556          VNDX    v1i, v2i, v3i;
557          BARYCCM bvecs;
558 <        FLOAT   bcoor[3][3];
558 >        RREAL   bcoor[3][3];
559          int     texOK, patOK;
560 +        int     flatness;
561          register int    i;
562  
563          if ((mod = getmtl()) == NULL)
# Line 568 | Line 566 | char   *v1, *v2, *v3;
566          if (!cvtndx(v1i, v1) || !cvtndx(v2i, v2) || !cvtndx(v3i, v3))
567                  return(0);
568                                          /* compute barycentric coordinates */
569 <        if (!flatten && v1i[2]>=0 && v2i[2]>=0 && v3i[2]>=0)
570 <                switch (flat_tri(vlist[v1i[0]], vlist[v2i[0]], vlist[v3i[0]],
571 <                        vnlist[v1i[2]], vnlist[v2i[2]], vnlist[v3i[2]])) {
574 <                case DEGEN:             /* zero area */
575 <                        return(-1);
576 <                case RVFLAT:            /* reversed normals, but flat */
577 <                case ISFLAT:            /* smoothing unnecessary */
578 <                        texOK = 0;
579 <                        break;
580 <                case RVBENT:            /* reversed normals with smoothing */
581 <                case ISBENT:            /* proper smoothing */
582 <                        texOK = 1;
583 <                        break;
584 <                }
569 >        if (v1i[2]>=0 && v2i[2]>=0 && v3i[2]>=0)
570 >                flatness = flat_tri(vlist[v1i[0]], vlist[v2i[0]], vlist[v3i[0]],
571 >                                vnlist[v1i[2]], vnlist[v2i[2]], vnlist[v3i[2]]);
572          else
573 +                flatness = ISFLAT;
574 +
575 +        switch (flatness) {
576 +        case DEGEN:                     /* zero area */
577 +                return(-1);
578 +        case RVFLAT:                    /* reversed normals, but flat */
579 +        case ISFLAT:                    /* smoothing unnecessary */
580                  texOK = 0;
581 +                break;
582 +        case RVBENT:                    /* reversed normals with smoothing */
583 +        case ISBENT:                    /* proper smoothing */
584 +                texOK = 1;
585 +                break;
586 +        }
587 +        if (flatten)
588 +                texOK = 0;
589   #ifdef TEXMAPS
590          patOK = mapname[0] && (v1i[1]>=0 && v2i[1]>=0 && v3i[1]>=0);
591   #else
# Line 621 | Line 623 | char   *v1, *v2, *v3;
623                  put_baryc(&bvecs, bcoor, 2);
624          }
625   #endif
626 <                                        /* put out triangle */
626 >                                        /* put out (reversed) triangle */
627          printf("\n%s polygon %s.%d\n", mod, getonm(), faceno);
628          printf("0\n0\n9\n");
629 <        pvect(vlist[v1i[0]]);
630 <        pvect(vlist[v2i[0]]);
631 <        pvect(vlist[v3i[0]]);
632 <
629 >        if (flatness == RVFLAT || flatness == RVBENT) {
630 >                pvect(vlist[v3i[0]]);
631 >                pvect(vlist[v2i[0]]);
632 >                pvect(vlist[v1i[0]]);
633 >        } else {
634 >                pvect(vlist[v1i[0]]);
635 >                pvect(vlist[v2i[0]]);
636 >                pvect(vlist[v3i[0]]);
637 >        }
638          return(1);
639   }
640  
# Line 635 | Line 642 | char   *v1, *v2, *v3;
642   freeverts()                     /* free all vertices */
643   {
644          if (nvs) {
645 <                free((char *)vlist);
645 >                free((void *)vlist);
646                  nvs = 0;
647          }
648          if (nvts) {
649 <                free((char *)vtlist);
649 >                free((void *)vtlist);
650                  nvts = 0;
651          }
652          if (nvns) {
653 <                free((char *)vnlist);
653 >                free((void *)vnlist);
654                  nvns = 0;
655          }
656   }
# Line 657 | Line 664 | double x, y, z;
664                  if (nvs == 0)
665                          vlist = (FVECT *)malloc(CHUNKSIZ*sizeof(FVECT));
666                  else
667 <                        vlist = (FVECT *)realloc((char *)vlist,
667 >                        vlist = (FVECT *)realloc((void *)vlist,
668                                          (nvs+CHUNKSIZ)*sizeof(FVECT));
669                  if (vlist == NULL) {
670                          fprintf(stderr,
# Line 681 | Line 688 | double x, y, z;
688                  if (nvns == 0)
689                          vnlist = (FVECT *)malloc(CHUNKSIZ*sizeof(FVECT));
690                  else
691 <                        vnlist = (FVECT *)realloc((char *)vnlist,
691 >                        vnlist = (FVECT *)realloc((void *)vnlist,
692                                          (nvns+CHUNKSIZ)*sizeof(FVECT));
693                  if (vnlist == NULL) {
694                          fprintf(stderr,
# Line 705 | Line 712 | double x, y;
712   {
713          if (!(nvts%CHUNKSIZ)) {         /* allocate next block */
714                  if (nvts == 0)
715 <                        vtlist = (FLOAT (*)[2])malloc(CHUNKSIZ*2*sizeof(FLOAT));
715 >                        vtlist = (RREAL (*)[2])malloc(CHUNKSIZ*2*sizeof(RREAL));
716                  else
717 <                        vtlist = (FLOAT (*)[2])realloc((char *)vtlist,
718 <                                        (nvts+CHUNKSIZ)*2*sizeof(FLOAT));
717 >                        vtlist = (RREAL (*)[2])realloc((void *)vtlist,
718 >                                        (nvts+CHUNKSIZ)*2*sizeof(RREAL));
719                  if (vtlist == NULL) {
720                          fprintf(stderr,
721                          "Out of memory while allocating texture vertex %d\n",

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines