35 |
|
RREAL (*vtlist)[2]; /* map vertex list */ |
36 |
|
int nvts; |
37 |
|
|
38 |
+ |
int ndegen = 0; /* count of degenerate faces */ |
39 |
+ |
|
40 |
|
typedef int VNDX[3]; /* vertex index (point,map,normal) */ |
41 |
|
|
42 |
< |
#define CHUNKSIZ 256 /* vertex allocation chunk size */ |
42 |
> |
#define CHUNKSIZ 1024 /* vertex allocation chunk size */ |
43 |
|
|
44 |
< |
#define MAXARG 64 /* maximum # arguments in a statement */ |
44 |
> |
#define MAXARG 512 /* maximum # arguments in a statement */ |
45 |
|
|
46 |
|
/* qualifiers */ |
47 |
|
#define Q_MTL 0 |
142 |
|
printargs(argc, argv, stdout); |
143 |
|
convert(stdin); |
144 |
|
} |
145 |
+ |
if (ndegen) |
146 |
+ |
printf("# %d degenerate faces\n", ndegen); |
147 |
|
exit(0); |
148 |
|
userr: |
149 |
|
fprintf(stderr, "Usage: %s [-o obj][-m mapping][-n][-f] [file.obj]\n", |
274 |
|
if (!strcmp(argv[1], "off")) |
275 |
|
mapname[0] = '\0'; |
276 |
|
else |
277 |
< |
sprintf(mapname, "%s.pic", argv[1]); |
277 |
> |
sprintf(mapname, "%s.hdr", argv[1]); |
278 |
|
} else |
279 |
|
goto unknown; |
280 |
|
break; |
314 |
|
FILE *fp |
315 |
|
) |
316 |
|
{ |
317 |
< |
extern char *fgetline(); |
314 |
< |
static char sbuf[MAXARG*10]; |
317 |
> |
static char sbuf[MAXARG*16]; |
318 |
|
register char *cp; |
319 |
|
register int i; |
320 |
|
|
328 |
|
lineno++; |
329 |
|
*cp++ = '\0'; |
330 |
|
} |
331 |
< |
if (!*cp || i >= MAXARG-1) |
331 |
> |
if (!*cp) |
332 |
|
break; |
333 |
+ |
if (i >= MAXARG-1) { |
334 |
+ |
fprintf(stderr, |
335 |
+ |
"warning: line %d: too many arguments (limit %d)\n", |
336 |
+ |
lineno+1, MAXARG-1); |
337 |
+ |
break; |
338 |
+ |
} |
339 |
|
av[i++] = cp; |
340 |
|
while (*++cp && !isspace(*cp)) |
341 |
|
; |
578 |
|
return(1); |
579 |
|
} |
580 |
|
if ((cp = getmtl()) == NULL) |
581 |
< |
return(-1); |
581 |
> |
return(0); |
582 |
|
printf("\n%s polygon %s.%d\n", cp, getonm(), faceno); |
583 |
|
printf("0\n0\n%d\n", 3*ac); |
584 |
|
for (i = 0; i < ac; i++) { |
606 |
|
register int i; |
607 |
|
|
608 |
|
if ((mod = getmtl()) == NULL) |
609 |
< |
return(-1); |
609 |
> |
return(0); |
610 |
|
|
611 |
|
if (!cvtndx(v1i, v1) || !cvtndx(v2i, v2) || !cvtndx(v3i, v3)) |
612 |
|
return(0); |
619 |
|
|
620 |
|
switch (flatness) { |
621 |
|
case DEGEN: /* zero area */ |
622 |
+ |
ndegen++; |
623 |
|
return(-1); |
624 |
|
case RVFLAT: /* reversed normals, but flat */ |
625 |
|
case ISFLAT: /* smoothing unnecessary */ |
640 |
|
if (texOK | patOK) |
641 |
|
if (comp_baryc(&bvecs, vlist[v1i[0]], vlist[v2i[0]], |
642 |
|
vlist[v3i[0]]) < 0) |
643 |
< |
return(-1); |
643 |
> |
texOK = patOK = 0; |
644 |
|
/* put out texture (if any) */ |
645 |
|
if (texOK) { |
646 |
|
printf("\n%s texfunc %s\n", mod, TEXNAME); |