home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 March / macformat-022.iso / Shareware City / Graphics / SPD / Apps / obj2nff.awk < prev    next >
Encoding:
Text File  |  1994-05-10  |  1.6 KB  |  73 lines  |  [TEXT/ttxt]

  1. # Takes a Wavefront obj file and turns it into nff format
  2. # (currently translates only the Viewpoint .obj type files)
  3. # Outputs groups together, marking each group with a "# group foo" comment
  4. #
  5. # Eric Haines, 3D/Eye Inc   erich@eye.com
  6. # v1.0, 11/10/92
  7.  
  8. cat $* | awk '
  9. {
  10.     if ( $1 == "#" ) {
  11.     print $0
  12.     } else if ( $1 == "$" ) {
  13.     print "#"$0
  14.     } else if ( $1 == "g" ) {
  15.     grp = $2
  16.     for ( i = 3 ; i <= NF ; i++ ) {
  17.         grp = grp" "$i
  18.     }
  19.     groups[grp] = grp
  20.     } else if ( $1 == "v" ) {
  21.     nv++
  22.     v[nv] = $2" "$3" "$4
  23.     } else if ( $1 == "vn" ) {
  24.     nvn++
  25.     vn[nvn] = $2" "$3" "$4
  26. #    } else if ( $1 == "vt" ) {
  27. #    nvt++
  28. #    vt[nv] = $2" "$3" "$4
  29. #    } else if ( $1 == "s" ) {
  30. #    str = $2
  31. #    for ( i = 3 ; i <= NF ; i++ ) {
  32. #        str = str" "$i
  33. #    }
  34. #    printf( "# smoothing group %s\n", str )
  35.     } else if ( $1 == "f" ) {
  36.     if ( NF > 1 ) {
  37.         if ( index($2,"//") ) {
  38.         ng = ++ngrp[grp]
  39.         sg[grp,ng] = NF-1
  40.         for ( i = 2 ; i <= NF ; i++ ) {
  41.             delim = index($i,"//")
  42.             n1 = substr($i,1,delim-1)
  43.             n2 = substr($i,delim+2,length($i)-delim-1)
  44.             j = i-1
  45.             sv[grp,ng,j] = sprintf( "%s %s",v[n1],vn[n2] )
  46.         }
  47.         } else {
  48.     printf("sorry, do not recognize the format %s yet - teach me!\n",$0 )
  49.         exit
  50.         }
  51.     }
  52.     }
  53. }
  54. END {
  55.     for ( typ in groups ) {
  56.     if ( ngrp[typ] > 0 ) {
  57.         printf( "# group %s\n", typ )
  58.         for ( ng = 1 ; ng <= ngrp[typ] ; ng++ ) {
  59.         printf ("pp %d\n", sg[typ,ng] )
  60.         numv = sg[typ,ng]
  61.         for ( i = 1 ; i <= numv ; i++ ) {
  62.             print sv[typ,ng,i]
  63.         }
  64.         np++
  65.         }
  66.     }
  67.     }
  68.     printf( "# %d vertices, %d normals\n", nv, nvn )
  69.     printf( "# %d polygons\n", np )
  70. }'
  71.  
  72.  
  73.