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

Comparing ray/src/gen/gensurf.c (file contents):
Revision 2.25 by greg, Fri May 4 23:56:49 2018 UTC vs.
Revision 2.30 by greg, Tue Dec 10 17:22:39 2024 UTC

# Line 58 | Line 58 | double  l_hermite(), l_bezier(), l_bspline(), l_datava
58  
59   typedef struct {
60          int  valid;     /* point is valid (vertex number) */
61 <        int  nvalid;    /* normal is valid */
61 >        int  nvalid;    /* normal is valid (normal number) */
62          FVECT  p;       /* vertex position */
63          FVECT  n;       /* average normal */
64          RREAL  uv[2];   /* (u,v) position */
# Line 78 | Line 78 | int norminterp(FVECT resmat[4], POINT *p0, POINT *p1,
78  
79  
80   int
81 < main(argc, argv)
82 < int  argc;
83 < char  *argv[];
81 > main(int argc, char *argv[])
82   {
83          POINT  *row0, *row1, *row2, *rp;
84          int  i, j, m, n;
# Line 116 | Line 114 | char  *argv[];
114  
115          modname = argv[1];
116          surfname = argv[2];
117 <        m = atoi(argv[6]);
118 <        n = atoi(argv[7]);
117 >        m = eval(argv[6]) + .5;
118 >        n = eval(argv[7]) + .5;
119          if (m <= 0 || n <= 0)
120                  goto userror;
121          if (!strcmp(argv[5], "-") || access(argv[5], 4) == 0) { /* file? */
# Line 152 | Line 150 | char  *argv[];
150                                                  /* print header */
151          fputs("# ", stdout);
152          printargs(argc, argv, stdout);
153 <        eclock = 0;
153 >        eclock = 1;
154                                                  /* initialize */
155          comprow(-1.0/m, row0, n);
156          comprow(0.0, row1, n);
# Line 160 | Line 158 | char  *argv[];
158          compnorms(row0, row1, row2, n);
159          if (objout) {
160                  printf("\nusemtl %s\n\n", modname);
161 +                printf("o %s\n\n", surfname);
162                  putobjrow(row1, n);
163          }
164                                                  /* for each row */
# Line 309 | Line 308 | putobjrow(                     /* output vertex row to .OBJ */
308          int  n
309   )
310   {
311 +        static FVECT  prevNorm;
312 +
313          for ( ; n-- >= 0; rp++) {
314                  if (!rp->valid)
315                          continue;
316                  fputs("v ", stdout);
317                  pvect(rp->p);
318 <                if (smooth && !ZEROVECT(rp->n)) {
318 >                rp->valid = ++nverts;
319 >                printf("\tvt %.9g %.9g\n", rp->uv[0], rp->uv[1]);
320 >                if (!smooth || ZEROVECT(rp->n))
321 >                        rp->nvalid = 0;
322 >                else if (VABSEQ(rp->n, prevNorm))
323 >                        rp->nvalid = nnorms;
324 >                else {
325                          printf("\tvn %.9g %.9g %.9g\n",
326                                          rp->n[0], rp->n[1], rp->n[2]);
327                          rp->nvalid = ++nnorms;
328 <                } else
329 <                        rp->nvalid = 0;
323 <                printf("\tvt %.9g %.9g\n", rp->uv[0], rp->uv[1]);
324 <                rp->valid = ++nverts;
328 >                        VCOPY(prevNorm, rp->n);
329 >                }
330          }
331   }
332  
# Line 510 | Line 515 | compnorms(             /* compute row of averaged normals */
515                                          /* compute row 1 normals */
516          while (siz-- >= 0) {
517                  if (!r1[0].valid)
518 <                        continue;
518 >                        goto skip;
519                  if (!r0[0].valid) {
520                          if (!r2[0].valid) {
521                                  r1[0].n[0] = r1[0].n[1] = r1[0].n[2] = 0.0;
522 <                                continue;
522 >                                goto skip;
523                          }
524                          fvsum(v1, r2[0].p, r1[0].p, -1.0);
525                  } else if (!r2[0].valid)
# Line 524 | Line 529 | compnorms(             /* compute row of averaged normals */
529                  if (!r1[-1].valid) {
530                          if (!r1[1].valid) {
531                                  r1[0].n[0] = r1[0].n[1] = r1[0].n[2] = 0.0;
532 <                                continue;
532 >                                goto skip;
533                          }
534                          fvsum(v2, r1[1].p, r1[0].p, -1.0);
535                  } else if (!r1[1].valid)
# Line 533 | Line 538 | compnorms(             /* compute row of averaged normals */
538                          fvsum(v2, r1[1].p, r1[-1].p, -1.0);
539                  fcross(r1[0].n, v1, v2);
540                  normalize(r1[0].n);
541 +        skip:
542                  r0++; r1++; r2++;
543          }
544   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines