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.16 by greg, Sat Aug 21 11:54:06 2004 UTC vs.
Revision 2.21 by greg, Sun Mar 11 22:27:17 2012 UTC

# Line 34 | Line 34 | char  VNAME[] =        "valid";                /* valid vertex name */
34  
35   #define  pvect(p)       printf(vformat, (p)[0], (p)[1], (p)[2])
36  
37 < char  vformat[] = "%15.9g %15.9g %15.9g\n";
38 < char  tsargs[] = "4 surf_dx surf_dy surf_dz surf.cal\n";
37 > char  vformat[] = "%18.12g %18.12g %18.12g\n";
38 > char  tsargs[] = "4 surf_dx surf_dy surf_dz surf.cal";
39   char  texname[] = "Phong";
40  
41   int  smooth = 0;                /* apply smoothing? */
# 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 182 | Line 183 | char  *argv[];
183  
184   userror:
185          fprintf(stderr, "Usage: %s material name ", argv[0]);
186 <        fprintf(stderr, "x(s,t) y(s,t) z(s,t) m n [-s][-e expr][-f file]\n");
186 >        fprintf(stderr, "x(s,t) y(s,t) z(s,t) m n [-s][-o][-e expr][-f file]\n");
187          return 1;
188   }
189  
# Line 229 | Line 230 | loaddata(              /* load point data from file */
230                  size--;
231          }
232          if (size == (m+n+1)*pointsize) {        /* no border after all */
233 <                dp = (RREAL *)realloc((void *)datarec.data,
233 >                dp = (RREAL *)realloc(datarec.data,
234                                  m*n*pointsize*sizeof(RREAL));
235                  if (dp != NULL)
236                          datarec.data = dp;
# 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 */
# Line 382 | Line 376 | putsquare(             /* put out a square */
376          if (ok1 & ok2 && fdot(vc1,vc2) >= 1.0-FTINY*FTINY) {
377                  printf("\n%s ", modname);
378                  if (axis != -1) {
379 <                        printf("texfunc %s\n", texname);
386 <                        printf(tsargs);
379 >                        printf("texfunc %s\n%s\n", texname, tsargs);
380                          printf("0\n13\t%d\n", axis);
381                          pvect(norm[0]);
382                          pvect(norm[1]);
# Line 405 | Line 398 | putsquare(             /* put out a square */
398          if (ok1) {
399                  printf("\n%s ", modname);
400                  if (axis != -1) {
401 <                        printf("texfunc %s\n", texname);
409 <                        printf(tsargs);
401 >                        printf("texfunc %s\n%s\n", texname, tsargs);
402                          printf("0\n13\t%d\n", axis);
403                          pvect(norm[0]);
404                          pvect(norm[1]);
# Line 424 | Line 416 | putsquare(             /* put out a square */
416          if (ok2) {
417                  printf("\n%s ", modname);
418                  if (axis != -1) {
419 <                        printf("texfunc %s\n", texname);
428 <                        printf(tsargs);
419 >                        printf("texfunc %s\n%s\n", texname, tsargs);
420                          printf("0\n13\t%d\n", axis);
421                          pvect(norm[0]);
422                          pvect(norm[1]);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines