| 64 |  | RREAL  uv[2];   /* (u,v) position */ | 
| 65 |  | } POINT; | 
| 66 |  |  | 
| 67 | + | int  nverts = 0;                /* vertex output count */ | 
| 68 | + | int  nnorms = 0;                /* normal output count */ | 
| 69 |  |  | 
| 70 |  | void loaddata(char *file, int m, int n, int pointsize); | 
| 71 |  | double l_dataval(char *nam); | 
| 72 |  | void putobjrow(POINT *rp, int n); | 
| 73 | + | void putobjvert(POINT *p); | 
| 74 |  | void putsquare(POINT *p0, POINT *p1, POINT *p2, POINT *p3); | 
| 75 |  | void comprow(double s, POINT *row, int siz); | 
| 76 |  | void compnorms(POINT *r0, POINT *r1, POINT *r2, int siz); | 
| 301 |  | int  n | 
| 302 |  | ) | 
| 303 |  | { | 
| 301 | – | static int      nverts = 0; | 
| 302 | – | static int      nnorms = 0; | 
| 303 | – |  | 
| 304 |  | for ( ; n-- >= 0; rp++) { | 
| 305 |  | if (!rp->valid) | 
| 306 |  | continue; | 
| 319 |  |  | 
| 320 |  |  | 
| 321 |  | void | 
| 322 | + | putobjvert(             /* put out OBJ vertex index triplet */ | 
| 323 | + | POINT *p | 
| 324 | + | ) | 
| 325 | + | { | 
| 326 | + | int     pti = p->valid ? p->valid-nverts-1 : 0; | 
| 327 | + | int     ni = p->nvalid ? p->nvalid-nnorms-1 : 0; | 
| 328 | + |  | 
| 329 | + | printf(" %d/%d/%d", pti, pti, ni); | 
| 330 | + | } | 
| 331 | + |  | 
| 332 | + |  | 
| 333 | + | void | 
| 334 |  | putsquare(              /* put out a square */ | 
| 335 |  | POINT *p0, | 
| 336 |  | POINT *p1, | 
| 362 |  | return; | 
| 363 |  | if (objout) {                   /* output .OBJ faces */ | 
| 364 |  | if (ok1 & ok2 && fdot(vc1,vc2) >= 1.0-FTINY*FTINY) { | 
| 365 | < | printf("f %d/%d/%d %d/%d/%d %d/%d/%d %d/%d/%d\n", | 
| 366 | < | p0->valid, p0->valid, p0->nvalid, | 
| 367 | < | p1->valid, p1->valid, p1->nvalid, | 
| 368 | < | p3->valid, p3->valid, p3->nvalid, | 
| 357 | < | p2->valid, p2->valid, p2->nvalid); | 
| 365 | > | putc('f', stdout); | 
| 366 | > | putobjvert(p0); putobjvert(p1); | 
| 367 | > | putobjvert(p3); putobjvert(p2); | 
| 368 | > | putc('\n', stdout); | 
| 369 |  | return; | 
| 370 |  | } | 
| 371 | < | if (ok1) | 
| 372 | < | printf("f %d/%d/%d %d/%d/%d %d/%d/%d\n", | 
| 373 | < | p0->valid, p0->valid, p0->nvalid, | 
| 374 | < | p1->valid, p1->valid, p1->nvalid, | 
| 375 | < | p2->valid, p2->valid, p2->nvalid); | 
| 376 | < | if (ok2) | 
| 377 | < | printf("f %d/%d/%d %d/%d/%d %d/%d/%d\n", | 
| 378 | < | p2->valid, p2->valid, p2->nvalid, | 
| 379 | < | p1->valid, p1->valid, p1->nvalid, | 
| 380 | < | p3->valid, p3->valid, p3->nvalid); | 
| 371 | > | if (ok1) { | 
| 372 | > | putc('f', stdout); | 
| 373 | > | putobjvert(p0); putobjvert(p1); putobjvert(p2); | 
| 374 | > | putc('\n', stdout); | 
| 375 | > | } | 
| 376 | > | if (ok2) { | 
| 377 | > | putc('f', stdout); | 
| 378 | > | putobjvert(p2); putobjvert(p1); putobjvert(p3); | 
| 379 | > | putc('\n', stdout); | 
| 380 | > | } | 
| 381 |  | return; | 
| 382 |  | } | 
| 383 |  | /* compute normal interpolation */ |