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.23 by greg, Fri Apr 23 16:20:56 2004 UTC vs.
Revision 2.26 by greg, Thu Sep 16 03:28:21 2010 UTC

# Line 35 | Line 35 | int    nvns;
35   RREAL   (*vtlist)[2];           /* map vertex list */
36   int     nvts;
37  
38 + int     ndegen = 0;             /* count of degenerate faces */
39 + int     n0norm = 0;             /* count of zero normals */
40 +
41   typedef int     VNDX[3];        /* vertex index (point,map,normal) */
42  
43   #define CHUNKSIZ        1024    /* vertex allocation chunk size */
# Line 140 | Line 143 | main(          /* read in .obj file and convert */
143                  printargs(argc, argv, stdout);
144                  convert(stdin);
145          }
146 +        if (ndegen)
147 +                printf("# %d degenerate faces\n", ndegen);
148 +        if (n0norm)
149 +                printf("# %d invalid (zero) normals\n", n0norm);
150          exit(0);
151   userr:
152          fprintf(stderr, "Usage: %s [-o obj][-m mapping][-n][-f] [file.obj]\n",
# Line 270 | Line 277 | convert(                       /* convert a T-mesh */
277                                  if (!strcmp(argv[1], "off"))
278                                          mapname[0] = '\0';
279                                  else
280 <                                        sprintf(mapname, "%s.pic", argv[1]);
280 >                                        sprintf(mapname, "%s.hdr", argv[1]);
281                          } else
282                                  goto unknown;
283                          break;
# Line 494 | Line 501 | cvtndx(                                /* convert vertex string to index */
501                          return(0);
502          } else
503                  vi[2] = -1;
504 +                                        /* zero normal is not normal */
505 +        if (vi[2] >= 0 && DOT(vnlist[vi[2]],vnlist[vi[2]]) <= FTINY)
506 +                vi[2] = -1;
507          return(1);
508   }
509  
# Line 574 | Line 584 | putface(                               /* put out an N-sided polygon */
584                  return(1);
585          }
586          if ((cp = getmtl()) == NULL)
587 <                return(-1);
587 >                return(0);
588          printf("\n%s polygon %s.%d\n", cp, getonm(), faceno);
589          printf("0\n0\n%d\n", 3*ac);
590          for (i = 0; i < ac; i++) {
# Line 602 | Line 612 | puttri(                        /* put out a triangle */
612          register int    i;
613  
614          if ((mod = getmtl()) == NULL)
615 <                return(-1);
615 >                return(0);
616  
617          if (!cvtndx(v1i, v1) || !cvtndx(v2i, v2) || !cvtndx(v3i, v3))
618                  return(0);
# Line 615 | Line 625 | puttri(                        /* put out a triangle */
625  
626          switch (flatness) {
627          case DEGEN:                     /* zero area */
628 +                ndegen++;
629                  return(-1);
630          case RVFLAT:                    /* reversed normals, but flat */
631          case ISFLAT:                    /* smoothing unnecessary */
# Line 635 | Line 646 | puttri(                        /* put out a triangle */
646          if (texOK | patOK)
647                  if (comp_baryc(&bvecs, vlist[v1i[0]], vlist[v2i[0]],
648                                  vlist[v3i[0]]) < 0)
649 <                        return(-1);
649 >                        texOK = patOK = 0;
650                                          /* put out texture (if any) */
651          if (texOK) {
652                  printf("\n%s texfunc %s\n", mod, TEXNAME);
# Line 748 | Line 759 | newvn(                 /* create a new vertex normal */
759          vnlist[nvns][0] = x;
760          vnlist[nvns][1] = y;
761          vnlist[nvns][2] = z;
762 <        if (normalize(vnlist[nvns]) == 0.0)
752 <                return(0);
762 >        n0norm += (normalize(vnlist[nvns]) == 0.0);
763          return(++nvns);
764   }
765  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines