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.20 by greg, Mon Aug 15 19:48:06 2011 UTC vs.
Revision 2.21 by greg, Sun Mar 11 22:27:17 2012 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 */
62          FVECT  p;       /* vertex position */
63          FVECT  n;       /* average normal */
64          RREAL  uv[2];   /* (u,v) position */
# Line 298 | Line 299 | putobjrow(                     /* output vertex row to .OBJ */
299   )
300   {
301          static int      nverts = 0;
302 +        static int      nnorms = 0;
303  
304          for ( ; n-- >= 0; rp++) {
305                  if (!rp->valid)
306                          continue;
307                  fputs("v ", stdout);
308                  pvect(rp->p);
309 <                if (smooth && !ZEROVECT(rp->n))
309 >                if (smooth && !ZEROVECT(rp->n)) {
310                          printf("\tvn %.9g %.9g %.9g\n",
311                                          rp->n[0], rp->n[1], rp->n[2]);
312 +                        rp->nvalid = ++nnorms;
313 +                } else
314 +                        rp->nvalid = 0;
315                  printf("\tvt %.9g %.9g\n", rp->uv[0], rp->uv[1]);
316                  rp->valid = ++nverts;
317          }
# Line 344 | Line 349 | putsquare(             /* put out a square */
349          if (!(ok1 | ok2))
350                  return;
351          if (objout) {                   /* output .OBJ faces */
347                int     p0n=0, p1n=0, p2n=0, p3n=0;
348                if (smooth) {
349                        if (!ZEROVECT(p0->n))
350                                p0n = p0->valid;
351                        if (!ZEROVECT(p1->n))
352                                p1n = p1->valid;
353                        if (!ZEROVECT(p2->n))
354                                p2n = p2->valid;
355                        if (!ZEROVECT(p3->n))
356                                p3n = p3->valid;
357                }
352                  if (ok1 & ok2 && fdot(vc1,vc2) >= 1.0-FTINY*FTINY) {
353                          printf("f %d/%d/%d %d/%d/%d %d/%d/%d %d/%d/%d\n",
354 <                                        p0->valid, p0->valid, p0n,
355 <                                        p1->valid, p1->valid, p1n,
356 <                                        p3->valid, p3->valid, p3n,
357 <                                        p2->valid, p2->valid, p2n);
354 >                                        p0->valid, p0->valid, p0->nvalid,
355 >                                        p1->valid, p1->valid, p1->nvalid,
356 >                                        p3->valid, p3->valid, p3->nvalid,
357 >                                        p2->valid, p2->valid, p2->nvalid);
358                          return;
359                  }
360                  if (ok1)
361                          printf("f %d/%d/%d %d/%d/%d %d/%d/%d\n",
362 <                                        p0->valid, p0->valid, p0n,
363 <                                        p1->valid, p1->valid, p1n,
364 <                                        p2->valid, p2->valid, p2n);
362 >                                        p0->valid, p0->valid, p0->nvalid,
363 >                                        p1->valid, p1->valid, p1->nvalid,
364 >                                        p2->valid, p2->valid, p2->nvalid);
365                  if (ok2)
366                          printf("f %d/%d/%d %d/%d/%d %d/%d/%d\n",
367 <                                        p2->valid, p2->valid, p2n,
368 <                                        p1->valid, p1->valid, p1n,
369 <                                        p3->valid, p3->valid, p3n);
367 >                                        p2->valid, p2->valid, p2->nvalid,
368 >                                        p1->valid, p1->valid, p1->nvalid,
369 >                                        p3->valid, p3->valid, p3->nvalid);
370                  return;
371          }
372                                          /* compute normal interpolation */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines