home *** CD-ROM | disk | FTP | other *** search
/ CD/PC Actual 11 / CDACTUAL11.iso / cdactual / demobin / share / os2 / IRIT50 / SCRIPTS / DINNER.IRT < prev    next >
Encoding:
Text File  |  1994-12-07  |  9.1 KB  |  299 lines

  1. #
  2. # A dinner table scene, to demonstrate the surface constructors of the IRIT
  3. # solid modeller. Do not attempt to run this model on an IBM PC...
  4. #
  5. #                    Gershon Elber, June 1991
  6. #
  7. # modification to dinner.ray:
  8. # fov 12
  9. # light 1 1 1 point 10 30 10
  10.  
  11. if ( machine == msdos, resolution = 5, resolution = 10 );
  12.  
  13. #
  14. # First model the floor...
  15. #
  16. v1 = vector( -4.0, -4.0, 0.0 );
  17. v2 = vector(  4.0, -4.0, 0.0 );
  18. v3 = vector(  4.0,  4.0, 0.0 );
  19. v4 = vector( -4.0,  4.0, 0.0 );
  20. floor = poly( list( v1, v2, v3, v4 ), false );
  21. color( floor, white );
  22. attrib( floor, "texture", "marble" );
  23. attrib( floor, "reflect", 0.6 );
  24. attrib( floor, "rgb", "100,0,0" );
  25.  
  26. #
  27. # Model the table:
  28. #
  29.  
  30. cross = ctlpt( E3, 0.0001, 0.0, 1.0 ) +
  31.         ctlpt( E3, 1.0,    0.0, 1.0 ) +
  32.         ctlpt( E3, 1.0,    0.0, 0.95 ) +
  33.     cbspline( 3,
  34.           list( ctlpt( E3, 0.1, 0.0, 0.95 ),
  35.             ctlpt( E3, 0.1, 0.0, 0.9 ),
  36.             ctlpt( E3, 0.1, 0.0, 0.7 ),
  37.             ctlpt( E3, 0.2, 0.0, 0.6 ),
  38.             ctlpt( E3, 0.2, 0.0, 0.2 ),
  39.             ctlpt( E3, 0.4, 0.0, 0.05 ),
  40.             ctlpt( E3, 0.4, 0.0, 0.0 ) ),
  41.           list( KV_OPEN ) ) +
  42.     ctlpt( E3, 0.0001, 0.0, 0.0 );
  43. table = surfrev( cross );
  44. color( table, yellow );
  45. attrib( table, "resolution", 2 );
  46. attrib( table, "texture", "wood" );
  47. attrib( table, "reflect", 0.6 );
  48. attrib( table, "rgb", "244,164,96" );
  49.  
  50. #
  51. # Make the two chairs.
  52. #
  53. base1 = sweepsrf( circle( vector( 0.0, 0.0, 0.0 ), 0.02 ),
  54.           cbspline( 3,
  55.                 list( ctlpt( E3, 0.5,   0.2, 0.5 ),
  56.                   ctlpt( E3, 0.5,   0.2, 0.07 ),
  57.                   ctlpt( E3, 0.5,   0.2, 0.015 ),
  58.                   ctlpt( E3, 0.43,  0.2, 0.015 ),
  59.                   ctlpt( E3, 0.25,  0.2, 0.1 ),
  60.                   ctlpt( E3, 0.07,  0.2, 0.015 ),
  61.                   ctlpt( E3, 0.0,   0.2, 0.015 ),
  62.                   ctlpt( E3, 0.0,   0.2, 0.07 ),
  63.                   ctlpt( E3, 0.0,   0.2, 0.5 ) ),
  64.                 list( KV_OPEN ) ),
  65.           off );
  66. color( base1, white );
  67. attrib( base1, "reflect", 0.9 );
  68. base2 = base1 * trans( vector( 0.0, -0.4, 0.0 ) );
  69.  
  70. swpcrv = cbspline( 3,
  71.            list( ctlpt( E3,  0.6, 0.0, 0.5 ),
  72.              ctlpt( E3,  0.3, 0.0, 0.6 ),
  73.              ctlpt( E3,  0.0, 0.0, 0.5 ),
  74.              ctlpt( E3, -0.1, 0.0, 0.5 ),
  75.              ctlpt( E3, -0.1, 0.0, 0.6 ),
  76.              ctlpt( E3,  0.0, 0.0, 0.9 ),
  77.              ctlpt( E3, -0.1, 0.0, 1.2 ) ),
  78.            list( KV_OPEN ) );
  79. swpcrv = crefine( swpcrv, false, list( 0.01, 0.1, 0.2, 0.3, 4.7, 4.8, 4.9, 4.99 ) );
  80.  
  81. cross = arc( vector(  0.25,  0.05,  0.0 ),
  82.          vector(  0.25,  0.0,   0.0 ),
  83.          vector(  0.3,   0.0,   0.0 ) ) +
  84.     arc( vector(  0.3,   0.0,   0.0 ),
  85.          vector(  0.25,  0.0,   0.0 ),
  86.          vector(  0.25, -0.05,  0.0 ) ) +
  87.     arc( vector( -0.25, -0.05,  0.0 ),
  88.          vector( -0.25,  0.0,   0.0 ),
  89.          vector( -0.3,   0.0,   0.0 ) ) +
  90.     arc( vector( -0.3,   0.0,   0.0 ),
  91.          vector( -0.25,  0.0,   0.0 ),
  92.          vector( -0.25,  0.05,  0.0 ) ) +
  93.     ctlpt( E3, 0.25, 0.05, 0.0 );
  94.  
  95. coverMain = sweepsrf( cross * rotz( 90 ), swpcrv, off );
  96. color( coverMain, yellow );
  97. attrib( coverMain, "texture", "wood" );
  98. attrib( coverMain, "rgb", "244,164,96" );
  99.  
  100. c1 = cmesh(coverMain, ROW, 14);
  101. c2 = c1 * trans( vector( -0.018, 0.0, 0.06 ) );
  102. c3 = c2 * scale( vector( 0.0, 0.83, 0.0 ) ) *
  103.       trans( vector( -0.124, 0.0, 1.26 ) );
  104. coverTop = sFromCrvs( list( c1, c2, c3 ), 3 );
  105. color( coverTop, yellow );
  106. attrib( coverTop, "texture", "wood" );
  107. attrib( coverTop, "rgb", "244,164,96" );
  108.  
  109. c1 = cmesh(coverMain, ROW, 0);
  110. c2 = c1 * trans( vector( 0.06, 0.0, -0.02 ) );
  111. c3 = c2 * scale( vector( 0.0, 0.83, 0.0 ) ) *
  112.       trans( vector( 0.66, 0.0, 0.48 ) );
  113. coverBot = sFromCrvs( list( c1, c2, c3 ), 3 );
  114. color( coverBot, yellow );
  115. attrib( coverBot, "texture", "wood" );
  116. attrib( coverBot, "rgb", "244,164,96" );
  117.  
  118. cover = list( CoverMain, coverBot, CoverTop );
  119.  
  120. chair = list( cover, base1, base2 );
  121. chair1 = chair * trans( vector( -1.2, 0.0, 0.0 ) );
  122. chair2 = chair1 * rotz( 90 );
  123. chair3 = chair1 * rotz( 180 );
  124. chair4 = chair1 * rotz( 270 );
  125. chairs = list( chair1, chair2, chair3, chair4 );
  126.  
  127. #
  128. # Create some dishes/cups.
  129. #
  130.  
  131. # Four Dishes.
  132. cross = cbspline( 3,
  133.           list( ctlpt( E3, 0.0001, 0.0, 0.003 ),
  134.             ctlpt( E3, 0.1,    0.0, 0.003 ),
  135.             ctlpt( E3, 0.12,   0.0, 0.0 ),
  136.             ctlpt( E3, 0.15,   0.0, 0.03 ),
  137.             ctlpt( E3, 0.15,   0.0, 0.04 ),
  138.             ctlpt( E3, 0.14,   0.0, 0.03 ),
  139.             ctlpt( E3, 0.12,   0.0, 0.013 ),
  140.             ctlpt( E3, 0.1,    0.0, 0.01 ),
  141.             ctlpt( E3, 0.0001, 0.0, 0.01 ) ),
  142.           list( KV_OPEN ) );
  143. dish = surfrev( cross );
  144. color( dish, white );
  145. attrib( dish, "reflect", 0.2 );
  146. dish1 = dish * trans( vector( 0.75, 0.0, 1.0 ) );
  147. dish2 = dish * trans( vector( -0.75, 0.0, 1.0 ) );
  148. dish3 = dish * trans( vector( 0.0, 0.75, 1.0 ) );
  149. dish4 = dish * trans( vector( 0.0, -0.75, 1.0 ) );
  150. dishes = list( dish1, dish2, dish3, dish4 );
  151.  
  152. # Wine glasses.
  153. cross = cbspline( 3,
  154.           list( ctlpt( E3, 0.0001, 0.0, 0.002 ),
  155.               ctlpt( E3, 0.02,   0.0, 0.002 ),
  156.             ctlpt( E3, 0.022,  0.0, 0.0 ),
  157.             ctlpt( E3, 0.022,  0.0, 0.003 ),
  158.             ctlpt( E3, 0.003,  0.0, 0.003 ),
  159.             ctlpt( E3, 0.003,  0.0, 0.007 ),
  160.             ctlpt( E3, 0.004,  0.0, 0.03 ),
  161.             ctlpt( E3, 0.03,   0.0, 0.03 ),
  162.             ctlpt( E3, 0.04,   0.0, 0.04 ),
  163.             ctlpt( E3, 0.03,   0.0, 0.07 ),
  164.             ctlpt( E3, 0.028,  0.0, 0.07 ),
  165.             ctlpt( E3, 0.037,  0.0, 0.042 ),
  166.             ctlpt( E3, 0.031,  0.0, 0.032 ),
  167.             ctlpt( E3, 0.0001, 0.0, 0.032 ) ),
  168.         list( KV_OPEN ) );
  169. wglass = surfrev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
  170. color( wglass, white );
  171. attrib( wglass, "reflect", 0.2 );
  172. attrib( wglass, "transp", 0.95 );
  173. attrib( wglass, "index", 1.4 );
  174. wglass1 = wglass * trans( vector( 0.75, 0.2, 1.0 ) );
  175. wglass2 = wglass * trans( vector( -0.75, -0.2, 1.0 ) );
  176. wglass3 = wglass * trans( vector( -0.2, 0.75, 1.0 ) );
  177. wglass4 = wglass * trans( vector( 0.2, -0.75, 1.0 ) );
  178. wglasses = list( wglass1, wglass2, wglass3, wglass4 );
  179.  
  180. # Regular glasses.
  181. cross = cbspline( 3,
  182.           list( ctlpt( E3, 0.0001, 0.0, 0.0 ),
  183.               ctlpt( E3, 0.02,   0.0, 0.0 ),
  184.             ctlpt( E3, 0.022,  0.0, 0.001 ),
  185.             ctlpt( E3, 0.022,  0.0, 0.003 ),
  186.             ctlpt( E3, 0.03,   0.0, 0.07 ),
  187.             ctlpt( E3, 0.03,   0.0, 0.072 ),
  188.             ctlpt( E3, 0.028,  0.0, 0.072 ),
  189.             ctlpt( E3, 0.028,  0.0, 0.07 ),
  190.             ctlpt( E3, 0.02,   0.0, 0.005 ),
  191.             ctlpt( E3, 0.018,  0.0, 0.005 ),
  192.             ctlpt( E3, 0.0001, 0.0, 0.005 ) ),
  193.           list( KV_OPEN ) );
  194. glass = surfrev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
  195. color( glass, white );
  196. attrib( glass, "reflect", 0.2 );
  197. attrib( glass, "transp", 0.95 );
  198. attrib( glass, "index", 1.4 );
  199. glass1 = glass * trans( vector( 0.75, -0.2, 1.0 ) );
  200. glass2 = glass * trans( vector( -0.75, 0.2, 1.0 ) );
  201. glass3 = glass * trans( vector( 0.2, 0.75, 1.0 ) );
  202. glass4 = glass * trans( vector( -0.2, -0.75, 1.0 ) );
  203. glasses = list( glass1, glass2, glass3, glass4 );
  204.  
  205. # Napkins.
  206. cross = cbspline( 3,
  207.           list( ctlpt( E2, -0.018, 0.001 ),
  208.               ctlpt( E2,  0.018, 0.001 ),
  209.             ctlpt( E2,  0.019, 0.002 ),
  210.             ctlpt( E2,  0.018, 0.004 ),
  211.             ctlpt( E2, -0.018, 0.004 ),
  212.             ctlpt( E2, -0.019, 0.001 ) ),
  213.           list( KV_OPEN ) );
  214. cross = cross + -cross * scale( vector( 1, -1, 1 ) );
  215.  
  216. napkin = extrude( cross * scale( vector( 1.6, 1.6, 1.6 ) ),
  217.           vector( 0.02, 0.03, 0.2 ) );
  218. color( napkin, red );
  219. napkin1 = napkin * trans( vector( 0.75, -0.2, 1.0 ) );
  220. napkin2 = napkin1 * rotz( 90 );
  221. napkin3 = napkin1 * rotz( 180 );
  222. napkin4 = napkin1 * rotz( 270 );
  223. napkins = list( napkin1, napkin2, napkin3, napkin4 );
  224.  
  225. # Big dish.
  226. cross = ctlpt( E3, 0.0001, 0.0, 0.003 ) +
  227.     cbspline( 3,
  228.           list(    ctlpt( E3, 0.15,   0.0, 0.003 ),
  229.             ctlpt( E3, 0.1,    0.0, 0.01 ),
  230.             ctlpt( E3, 0.1,    0.0, 0.035 ),
  231.             ctlpt( E3, 0.2,    0.0, 0.15 ),
  232.             ctlpt( E3, 0.195,  0.0, 0.15 ),
  233.             ctlpt( E3, 0.09,   0.0, 0.03 ),
  234.             ctlpt( E3, 0.04,   0.0, 0.01 ),
  235.             ctlpt( E3, 0.0001, 0.0, 0.01 ) ),
  236.           list( KV_OPEN ) );
  237. bigdish = surfrev( cross * scale( vector( 1.2, 1.2, 1.2 ) ) );
  238. bigdish = bigdish * trans( vector( 0.0, -0.2, 1.0 ) );
  239. color( bigdish, white );
  240. attrib( bigdish, "reflect", 0.2 );
  241. attrib( bigdish, "transp", 0.95 );
  242. attrib( bigdish, "index", 1.4 );
  243. alldishes = list( dishes, wglasses, glasses, napkins, bigdish );
  244.  
  245. #
  246. # Create some candles staff.
  247. #
  248. cross = cbspline( 3,
  249.           list( ctlpt( E3, 0.0001, 0.0, 0.0 ),
  250.             ctlpt( E3, 0.03,   0.0, 0.0 ),
  251.             ctlpt( E3, 0.035,   0.0, -0.001 ),
  252.             ctlpt( E3, 0.02,   0.0, 0.011 ),
  253.             ctlpt( E3, 0.015,  0.0, 0.011 ),
  254.             ctlpt( E3, 0.014,  0.0, 0.012 ),
  255.             ctlpt( E3, 0.014,  0.0, 0.02 ),
  256.             ctlpt( E3, 0.02,   0.0, 0.03 ) ),
  257.           list( KV_OPEN ) ) +
  258.     ctlpt( E3, 0.012,  0.0, 0.03 ) +
  259.     ctlpt( E3, 0.012,  0.0, 0.015 ) +
  260.     ctlpt( E3, 0.0001, 0.0, 0.015 );
  261.  
  262. cndlbase = surfrev( cross * scale( vector( 2, 2, 2 ) ) );
  263. color( cndlbase, white );
  264. attrib( cndlbase, "reflect", 0.2 );
  265. attrib( cndlbase, "transp", 0.95 );
  266. cndlbase1 = cndlbase * trans( vector( 0.2, 0.3, 1.0 ) );
  267. cndlbase2 = cndlbase * trans( vector( -0.2, 0.3, 1.0 ) );
  268.  
  269. cross = ctlpt( E3, 0.0001, 0.0, 0.015 ) +
  270.     cbspline( 3,
  271.           list(    ctlpt( E3, 0.011,  0.0, 0.015 ),
  272.             ctlpt( E3, 0.011,  0.0, 0.2 ),
  273.             ctlpt( E3, 0.003,  0.0, 0.3 ) ),
  274.           list( KV_OPEN ) );
  275. candle = surfrev( cross * scale( vector( 2, 2, 2 ) ) );
  276. color( candle, red );
  277. candle1 = candle * trans( vector( 0.2, 0.3, 1.0 ) );
  278. candle2 = candle * trans( vector( -0.2, 0.3, 1.0 ) );
  279.  
  280. candles = list( cndlbase1, cndlbase2, candle1, candle2 );
  281.  
  282. #
  283. # View it all and dump it.
  284. #
  285. #
  286. # Go to single buffer since this one is slow.
  287. #
  288. viewstate("DblBuffer");
  289.  
  290. save_mat = view_mat;
  291. view_mat = view_mat * scale( vector( 0.5, 0.5, 0.5 ) );
  292. dinner = list( floor, table, chairs, alldishes, candles );
  293.  
  294. interact( dinner );
  295. save( "dinner", dinner );
  296.  
  297. view_mat = save_mat;
  298. view( list( view_mat ), on );
  299.