home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / gfx / 3d / irit / scripts / smorph.irt < prev    next >
Encoding:
Text File  |  1994-09-03  |  9.5 KB  |  333 lines

  1. #
  2. # A simple example of surface morphing.
  3. #
  4. #                    Gershon Elber, July 1992.
  5. #
  6. # render with raysahde with a unit matrix and the following:
  7. #
  8. # eyep   10 8  6
  9. # lookp  0  0  0
  10. # up     0  0  1
  11. # fov 12
  12. # light 0.8 directional 0 0 1
  13. # light 0.7 directional 0 1 0
  14. # light 0.6 directional 1 0 0
  15.  
  16. save_res = resolution;
  17. view(list(view_mat), on);
  18.  
  19. if ( machine == msdos, resolution = 7, resolution = 10 );
  20. if ( machine == msdos, step = 0.2, step = 0.05 );
  21.  
  22. FloorLvl = -0.72;
  23. FloorXYMin = -1.4;
  24.  
  25. v1 = vector( -16.0, -16.0, FloorLvl );
  26. V2 = vector( -16.0,  16.0, FloorLvl );
  27. v3 = vector(  16.0,  16.0, FloorLvl );
  28. v4 = vector(  16.0, -16.0, FloorLvl );
  29. Floor = poly( list( v1, v2, v3, v4 ), false );
  30. color( Floor, red );
  31. attrib( Floor, "rgb", "244,164,96" );
  32. attrib( Floor, "texture", "wood" );
  33. attrib( Floor, "reflect", "0.3" );
  34.  
  35. Wall1 = poly( list( vector( FloorXYMin,       16.0, FloorLvl ),
  36.             vector( FloorXYMin, FloorXYMin, FloorLvl ),
  37.             vector( FloorXYMin, FloorXYMin, 16.0 ),
  38.             vector( FloorXYMin,       16.0, 16.0 ) ),
  39.           false );
  40. Wall2 = poly( list( vector(       16.0, FloorXYMin, FloorLvl ),
  41.             vector( FloorXYMin, FloorXYMin, FloorLvl ),
  42.             vector( FloorXYMin, FloorXYMin, 16.0 ),
  43.             vector(       16.0, FloorXYMin, 16.0 ) ),
  44.           false );
  45. color( Wall1, white );
  46. attrib( Wall1, "rgb", "255,255,255" );
  47. color( Wall2, white );
  48. attrib( Wall2, "rgb", "255,255,255" );
  49.  
  50. Backgrd = list( Floor, Wall1, Wall2 );
  51.  
  52. #############################################################################
  53. # First Morphing Sequence.                            #
  54. #############################################################################
  55.  
  56. Srf1 = ruledsrf( circle( vector( 0.0, 0.0, FloorLvl + 0.01 ), 1.0 ),
  57.          circle( vector( 0.0, 0.0, FloorLvl + 0.01 ), 0.01 ) );
  58. color( Srf1, yellow );
  59.  
  60. bcross = cbspline( 3,
  61.            list( ctlpt( E3,  0.0,  0.0, -0.71 ),
  62.                  ctlpt( E3,  0.2,  0.0, -0.72 ),
  63.                  ctlpt( E3,  0.25, 0.0, -0.7 ),
  64.                  ctlpt( E3,  0.25, 0.0, -0.1 ),
  65.                  ctlpt( E3,  0.2,  0.0, -0.05 ),
  66.                  ctlpt( E3,  0.15, 0.0,  0.0 ),
  67.                  ctlpt( E3,  0.1,  0.0,  0.6 ),
  68.              ctlpt( E3,  0.11, 0.0,  0.61 ),
  69.              ctlpt( E3,  0.12, 0.0,  0.61 ),
  70.              ctlpt( E3,  0.12, 0.0,  0.65 ),
  71.              ctlpt( E3,  0.09, 0.0,  0.65 ),
  72.              ctlpt( E3,  0.07, 0.0,  0.64 ),
  73.              ctlpt( E3,  0.10, 0.0, -0.05 ),
  74.              ctlpt( E3,  0.21, 0.0, -0.1 ),
  75.              ctlpt( E3,  0.21, 0.0, -0.64 ),
  76.              ctlpt( E3,  0.18, 0.0, -0.67),
  77.              ctlpt( E3,  0.0,  0.0, -0.66 ) ),
  78.            list( KV_OPEN ) );
  79. Srf2 = surfrev( bcross );
  80. free( bcross );
  81. color( Srf2, green );
  82.  
  83. #
  84. # Must make them compatible before doing some morphing.
  85. #
  86. ffcompat( Srf1, Srf2 );
  87.  
  88. #
  89. # Since we would like the animation to look as good as possible we need
  90. # to precompute as much as possible before invoking view to erase old
  91. # drawing and display new one. That is why we precompute isolines.
  92. #
  93.  
  94. for ( i = 0, step, 1.0,
  95.     view( smorph( Srf1, Srf2, i ), true )
  96. );
  97.  
  98. #
  99. # Now dump 12 steps in this morphing sequence as 12 distinct files.
  100. #
  101. for ( i = 0.0, 1.0, 11.0,
  102.     Msrf = smorph( Srf1, Srf2, i / 11.0 ):
  103.     color( Msrf, white ):
  104.     attrib( Msrf, "rgb", "255,255,255" ):
  105.     attrib( Msrf, "reflect", 1.0 ):
  106.     attrib( Msrf, "transp", 0.95 ):
  107.     attrib( Msrf, "index", 1.4 ):
  108.     save( "morp1-" + i, list( Msrf, Backgrd ) )
  109. );
  110.  
  111. #############################################################################
  112. # Second Morphing Sequence.                            #
  113. #############################################################################
  114.  
  115. bcross = cbspline( 3,
  116.            list( ctlpt( E3,  0.0,  0.0, -0.71 ),
  117.                  ctlpt( E3,  0.2,  0.0, -0.72 ),
  118.                  ctlpt( E3,  0.25, 0.0, -0.7 ),
  119.                  ctlpt( E3,  0.25, 0.0, -0.1 ),
  120.                  ctlpt( E3,  0.2,  0.0, -0.05 ),
  121.                  ctlpt( E3,  0.15, 0.0,  0.0 ),
  122.                  ctlpt( E3,  0.1,  0.0,  0.6 ),
  123.              ctlpt( E3,  0.11, 0.0,  0.61 ),
  124.              ctlpt( E3,  0.12, 0.0,  0.61 ),
  125.              ctlpt( E3,  0.12, 0.0,  0.65 ),
  126.              ctlpt( E3,  0.09, 0.0,  0.65 ),
  127.              ctlpt( E3,  0.07, 0.0,  0.64 ),
  128.              ctlpt( E3,  0.10, 0.0, -0.05 ),
  129.              ctlpt( E3,  0.21, 0.0, -0.1 ),
  130.              ctlpt( E3,  0.21, 0.0, -0.64 ),
  131.              ctlpt( E3,  0.18, 0.0, -0.67),
  132.              ctlpt( E3,  0.0,  0.0, -0.66 ) ),
  133.            list( KV_OPEN ) );
  134. Srf2 = surfrev( bcross );
  135. free( bcross );
  136. color( Srf2, green );
  137.  
  138. gcross = cbspline( 3,
  139.            list( ctlpt( E3, 0.001, 0.0, 0.02 ),
  140.                ctlpt( E3, 0.2,   0.0, 0.02 ),
  141.              ctlpt( E3, 0.22,  0.0, 0. ),
  142.              ctlpt( E3, 0.22,  0.0, 0.03 ),
  143.              ctlpt( E3, 0.03,  0.0, 0.03 ),
  144.              ctlpt( E3, 0.03,  0.0, 0.07 ),
  145.              ctlpt( E3, 0.04,  0.0, 0.3 ),
  146.              ctlpt( E3, 0.3,   0.0, 0.3 ),
  147.              ctlpt( E3, 0.4,   0.0, 0.4 ),
  148.              ctlpt( E3, 0.3,   0.0, 0.7 ),
  149.              ctlpt( E3, 0.28,  0.0, 0.7 ),
  150.              ctlpt( E3, 0.37,  0.0, 0.42 ),
  151.              ctlpt( E3, 0.31,  0.0, 0.32 ),
  152.              ctlpt( E3, 0.001, 0.0, 0.32 ) ),
  153.            list( KV_OPEN ) );
  154. Srf3 = surfrev( gcross * trans( vector( 0.0, 0.0, -0.45 ) ) *
  155.              scale( vector( 1.6, 1.6, 1.6 ) ) );
  156. free( gcross );
  157. color( Srf3, cyan );
  158.  
  159. #
  160. # Must make them compatible before doing some morphing.
  161. #
  162. ffcompat( Srf2, Srf3 );
  163.  
  164. for ( i = 0, step, 1.0,
  165.     view( smorph( Srf2, Srf3, i ), true )
  166. );
  167.  
  168. #
  169. # Now dump 12 steps in this morphing sequence as 12 distinct files.
  170. #
  171.  
  172. for ( i = 0.0, 1.0, 11.0,
  173.     Msrf = smorph( Srf2, Srf3, i / 11.0 ):
  174.     color( Msrf, white ):
  175.     attrib( Msrf, "rgb", "255,255,255" ):
  176.     attrib( Msrf, "reflect", 1.0 ):
  177.     attrib( Msrf, "transp", 0.95 ):
  178.     attrib( Msrf, "index", 1.4 ):
  179.     save( "morp2-" + i, list( Msrf, Backgrd ) )
  180. );
  181.  
  182. #############################################################################
  183. # Third Morphing Sequence.                            #
  184. #############################################################################
  185.  
  186. gcross = cbspline( 3,
  187.            list( ctlpt( E3, 0.001, 0.0, 0.02 ),
  188.                ctlpt( E3, 0.2,   0.0, 0.02 ),
  189.              ctlpt( E3, 0.22,  0.0, 0. ),
  190.              ctlpt( E3, 0.22,  0.0, 0.03 ),
  191.              ctlpt( E3, 0.03,  0.0, 0.03 ),
  192.              ctlpt( E3, 0.03,  0.0, 0.07 ),
  193.              ctlpt( E3, 0.04,  0.0, 0.3 ),
  194.              ctlpt( E3, 0.3,   0.0, 0.3 ),
  195.              ctlpt( E3, 0.4,   0.0, 0.4 ),
  196.              ctlpt( E3, 0.3,   0.0, 0.7 ),
  197.              ctlpt( E3, 0.28,  0.0, 0.7 ),
  198.              ctlpt( E3, 0.37,  0.0, 0.42 ),
  199.              ctlpt( E3, 0.31,  0.0, 0.32 ),
  200.              ctlpt( E3, 0.001, 0.0, 0.32 ) ),
  201.         list( KV_OPEN ) );
  202. Srf3 = surfrev( gcross * trans( vector( 0.0, 0.0, -0.45 ) ) *
  203.              scale( vector( 1.6, 1.6, 1.6 ) ) );
  204. free( gcross );
  205. color( Srf3, cyan );
  206.  
  207. s45 = sin( pi / 4 );
  208. HelixAux = cbspline( 3,
  209.              list( ctlpt( P3, 1, 1, 0, 0 ),
  210.                ctlpt( P3, s45, s45, s45, 0.2 * s45 ),
  211.                ctlpt( P3, 1, 0, 1, 0.4 ),
  212.                ctlpt( P3, s45, -s45, s45, 0.6 * s45 ),
  213.                ctlpt( P3, 1, -1, 0, 0.8 ),
  214.                ctlpt( P3, s45, -s45, -s45, 1.0 * s45 ),
  215.                ctlpt( P3, 1, 0, -1, 1.2 ),
  216.                ctlpt( P3, s45, s45, -s45, 1.4 * s45 ),
  217.                ctlpt( P3, 1, 1, 0, 1.6 ) ),
  218.              list( 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4 ) );
  219. HelixApx = HelixAux +
  220.        HelixAux * trans( vector( 0.0, 0.0, 1.6 ) ) +
  221.        HelixAux * trans( vector( 0.0, 0.0, 3.2 ) );
  222.  
  223. ScaleCrv = cbezier( list( ctlpt( E2, 0.0, 0.01 ),
  224.               ctlpt( E2, 1.0, 1.0 ) ) );
  225.  
  226. Srf4 = swpsclsrf( circle( vector( 0.0, 0.0, 0.0 ), 0.8 ), HelixApx, ScaleCrv,
  227.          off, 0 ) *
  228.     scale( vector( 0.2, 0.2, 0.2 ) ) *
  229.     trans( vector( 0.0, 0.0, FloorLvl ) );
  230.  
  231. free( HelixAux );
  232. free( HelixApx );
  233. free( ScaleCrv );
  234. color( Srf4, magenta );
  235.  
  236. #
  237. # Must make them compatible before doing some morphing.
  238. #
  239. ffcompat( Srf3, Srf4 );
  240.  
  241. for ( i = 0, step, 1.0,
  242.     view( smorph( Srf3, Srf4, i ), true )
  243. );
  244.  
  245. #
  246. # Now dump 12 steps in this morphing sequence as 12 distinct files.
  247. #
  248.  
  249. for ( i = 0.0, 1.0, 11.0,
  250.     Msrf = smorph( Srf3, Srf4, i / 11.0 ):
  251.     color( Msrf, white ):
  252.     attrib( Msrf, "rgb", "255,255,255" ):
  253.     attrib( Msrf, "reflect", 1.0 ):
  254.     attrib( Msrf, "transp", 0.95 ):
  255.     attrib( Msrf, "index", 1.4 ):
  256.     save( "morp3-" + i, list( Msrf, Backgrd ) )
  257. );
  258.  
  259. #############################################################################
  260. # Fourth Morphing Sequence.                            #
  261. #############################################################################
  262.  
  263. s45 = sin( pi / 4 );
  264. HelixAux = cbspline( 3,
  265.              list( ctlpt( P3, 1, 1, 0, 0 ),
  266.                ctlpt( P3, s45, s45, s45, 0.2 * s45 ),
  267.                ctlpt( P3, 1, 0, 1, 0.4 ),
  268.                ctlpt( P3, s45, -s45, s45, 0.6 * s45 ),
  269.                ctlpt( P3, 1, -1, 0, 0.8 ),
  270.                ctlpt( P3, s45, -s45, -s45, 1.0 * s45 ),
  271.                ctlpt( P3, 1, 0, -1, 1.2 ),
  272.                ctlpt( P3, s45, s45, -s45, 1.4 * s45 ),
  273.                ctlpt( P3, 1, 1, 0, 1.6 ) ),
  274.              list( 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4 ) );
  275. HelixApx = HelixAux +
  276.        HelixAux * trans( vector( 0.0, 0.0, 1.6 ) ) +
  277.        HelixAux * trans( vector( 0.0, 0.0, 3.2 ) );
  278.  
  279. ScaleCrv = cbezier( list( ctlpt( E2, 0.0, 0.01 ),
  280.               ctlpt( E2, 1.0, 1.0 ) ) );
  281.  
  282. Srf4 = swpsclsrf( circle( vector( 0.0, 0.0, 0.0 ), 0.8 ), HelixApx, ScaleCrv,
  283.          off, 0 ) *
  284.     scale( vector( 0.2, 0.2, 0.2 ) ) *
  285.     trans( vector( 0.0, 0.0, FloorLvl ) );
  286.  
  287. free( HelixAux );
  288. free( HelixApx );
  289. free( ScaleCrv );
  290. color( Srf4, magenta );
  291.  
  292. Srf1 = ruledsrf( circle( vector( 0.0, 0.0, FloorLvl + 0.01 ), 1.0 ),
  293.          circle( vector( 0.0, 0.0, FloorLvl + 0.01 ), 0.01 ) );
  294. color( Srf1, yellow );
  295.  
  296. #
  297. # Must make them compatible before doing some morphing.
  298. #
  299. ffcompat( Srf4, Srf1 );
  300.  
  301. #
  302. # Since we would like the animation to look as good as possible we need
  303. # to precompute as much as possible before invoking view to erase old
  304. # drawing and display new one. That is why we precompute isolines.
  305. #
  306. for ( i = 0, step, 1.0,
  307.     view( smorph( Srf4, Srf1, i ), true )
  308. );
  309.  
  310. #
  311. # Now dump 12 steps in this morphing sequence as 12 distinct files.
  312. #
  313. for ( i = 0.0, 1.0, 11.0,
  314.     Msrf = smorph( Srf4, Srf1, i / 11.0 ):
  315.     color( Msrf, white ):
  316.     attrib( Msrf, "rgb", "255,255,255" ):
  317.     attrib( Msrf, "reflect", 1.0 ):
  318.     attrib( Msrf, "transp", 0.95 ):
  319.     attrib( Msrf, "index", 1.4 ):
  320.     save( "morp4-" + i, list( Msrf, Backgrd ) )
  321. );
  322.  
  323. free(Msrf);
  324. free(Srf1);
  325. free(Srf2);
  326. free(Srf3);
  327. free(Srf4);
  328.  
  329. resolution = save_res;
  330.  
  331.