home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Raytrace & Morphing / SOS-RAYTRACE.ISO / programm / raytrace / rayce27 / cr2.r < prev    next >
Encoding:
Text File  |  1994-01-25  |  16.6 KB  |  753 lines

  1. /*
  2.   "Ritual to the goddess of Teraflops"
  3.  
  4.   ideen:
  5.  
  6.    -vuur erboven
  7.    -HF in achtergrond
  8.  
  9.   started: end 1992 
  10.   finished: Never..
  11.  
  12.  
  13.   by HWN
  14.  */
  15.  
  16. #include "colors.inc"
  17. #include "textures.inc"
  18. #include "shapes.inc"
  19.  
  20. #declare zoom = 
  21. camera {
  22.   location <1.5, 1.6, -1.8>
  23. //  right <1.33, 0, 0>
  24. //  up <0, 1.0, 0>
  25.   sky <0, 1, 0>
  26.   aspect 1.33
  27.   fov 90
  28.   look_at <0, 1.35, 0.5>
  29.   translate <1.5, 0, 0.5>
  30. }
  31.  
  32. object {
  33.   light_source {
  34.     <10, 20, -10> color Grey90
  35.     spotlight
  36.     point_at <0, 2, 0>
  37. //    radius 90
  38. //    falloff 70
  39.     tightness 0.05
  40.   }
  41. }
  42.  
  43. #declare Horizon = color DarkPurple
  44. #declare Darknight = color red 0.074 green 0.0 blue 0.143    // even darker
  45.  
  46.  
  47. options {
  48.   background y color Darknight
  49. }
  50.  
  51. #declare Sky_Globe = object {
  52.   sphere { <0, 0, 0>, 100 }
  53.   texture {
  54.     color Horizon
  55. /*    gradient <0, 1, 0>
  56.     color_map  {
  57.       [0.00 0.5 color Horizon color Black]
  58.       [0.50 1.0 color Black color Black]
  59.     }*/
  60.     scale <50, 80, 50>
  61.     ambient 0.3 diffuse 0.0 // no shadows
  62.   }
  63. }
  64.  
  65. /*
  66.  * Desert, with sand
  67.  */
  68. #declare Floor_Plane = object {
  69.   plane { <0, 1, 0>, 0 }
  70.   texture {
  71. //    waves 0.3 frequency 0.3 phase 0.0
  72.     color red 0.506 green 0.375 blue 0.102
  73.     ambient 0.3
  74.     diffuse 0.4    // donker
  75.   }
  76. }
  77.  
  78. /*
  79.  * start of altar part
  80.  */
  81. #declare Grnt19 = texture {
  82.   color Grey40
  83. }
  84. /*
  85.   granite
  86.   turbulence 0.0
  87.   color_map {
  88.     [0.0 0.3 color White   color DimGray]
  89.     [0.2 0.4 color DimGray color DimGray]
  90.     [0.4 0.6 color DimGray color DimGray]
  91.     [0.6 1.0 color DimGray color DimGray]
  92.   }
  93.   0.02
  94. }
  95.  
  96. */
  97.  
  98. #declare gleuf = quadric { Cylinder_Y scale <0.1, 1, 0.1> inverse }
  99. #declare bovenrichel = intersection {
  100.   plane { <1, 0, 0>, 0 rotate <0, -45, 0> }
  101.   plane { <-1, 0, 0>, 0 rotate <0, 45, 0> }
  102.   intersection { Disk_X scale <1.2, 0.05, 0.05> translate <-0.55, 1, -0.5> }
  103. }
  104.  
  105. #declare onderrichel = quadric { 
  106.   Cylinder_X scale <1, 0.05, 0.05> 
  107.   translate <0, 0.25, -0.6> inverse 
  108. }
  109.  
  110. #declare altar = object {
  111.   union {
  112.     intersection {
  113.       box { <-0.5, 0, -0.5>, <0.5, 1.05, 0.5> }
  114.       quadric { gleuf translate <0.5, 0, 0.5> }
  115.       quadric { gleuf translate <0.5, 0, -0.5> }
  116.       quadric { gleuf translate <-0.5, 0, -0.5> }
  117.       quadric { gleuf translate <-0.5, 0, 0.5> }
  118.     }
  119.     box { <-0.5, 1, -0.5>, <0.5, 1.05, 0.5> }
  120.     intersection { bovenrichel }
  121.     intersection { bovenrichel rotate <0, 90, 0> }
  122.     intersection { bovenrichel rotate <0, 180, 0> }
  123.     intersection { bovenrichel rotate <0, 270, 0> }
  124.     intersection {
  125.       box { <-0.6, 0, -0.6>, <0.6, 0.25, 0.6> }
  126.       quadric { onderrichel }
  127.       quadric { onderrichel rotate <0, 90, 0> }
  128.       quadric { onderrichel rotate <0, 180, 0> }
  129.       quadric { onderrichel rotate <0, 270, 0> }
  130.     }
  131.     
  132.   }
  133.   bounded_by {
  134.     box { <-0.7, 0, -0.7>, <0.7, 1.2, 0.7> }
  135.   }
  136.   texture {
  137.     Grnt19
  138.     specular 0.1
  139.     roughness 0.5
  140.   }
  141. }
  142.  
  143. #declare SandColor = color red 0.84 green 0.79 blue 0.53
  144.  
  145. #declare beige_plastic = texture {
  146.   roughness 0.2
  147.   specular 0.2
  148.   ambient 0.2
  149.   diffuse 0.5
  150.   color SandColor
  151. }
  152.  
  153. #declare traprot = 25
  154. #declare buisbox = box { <-0.16, -0.015, -0.2>, <0.16, 0.225, 0.1> }
  155.  
  156. #declare monitor_voet = union {    // voetje
  157.   intersection {
  158.     Disk_Y scale <0.15, 0.0075, 0.15>
  159.     translate <0, -0.1, 0>
  160.   }
  161.   intersection {
  162.     Disk_Y scale <0.05, 0.05, 0.05>
  163.     translate <0, -0.05, 0>
  164.   }
  165.   translate <0, 0, 0.1>
  166. }
  167.  
  168. #declare monitor_body = union {
  169.   intersection { // trapeziumvormige buishouder
  170.     plane { <0, -1, 0>, 0 }
  171.     plane { <-1, 0, 0>, 0 rotate <0, 15, 0>  translate <-0.16, 0, 0> }
  172.     plane { <1, 0, 0>, 0 rotate <0, -15, 0> translate <0.16, 0, 0> }
  173.     plane { <0, 1, 0>, 0 rotate <20, 0, 0>  translate <0, 0.23, 0> }
  174.     plane { <0, 0,  1>, 0.3 }
  175.     plane { <0, 0, -1>, 0.0 }
  176.   }
  177.   intersection { //voorkant
  178.     box { <-0.2, -0.045, -0.1>, <0.2, 0.255, 0.0> }
  179.     box {
  180.       buisbox
  181.       inverse
  182.     }
  183.   }
  184. }
  185.  
  186. #declare beeld = texture {
  187.   image_map { gif "povscreen.gif" once interpolate 2 }
  188.   specular 0.3
  189.   roughness 0.1
  190.   ambient 0.8
  191.   diffuse 0.1
  192.   scale <0.32, 0.24, 1>
  193.   translate <-0.16, -0.015, 0>
  194. }
  195.  
  196. #declare buis = object {
  197.   sphere { <0, 0.1, 1.92>, 2 }
  198.   clipped_by { box { buisbox } }
  199.   texture { beeld }
  200. }
  201.  
  202. #declare monitor = composite {
  203.   composite {
  204.     object { buis }
  205.     object { 
  206.     union { monitor_body } 
  207.     texture { beige_plastic } 
  208.     }
  209.     rotate <10, 0, 0>
  210.   }
  211.   object {
  212.     union { monitor_voet }
  213.     texture { beige_plastic }
  214.   }
  215.   translate <0, 0.1, 0>
  216.   bounded_by { box { <-0.25, 0.0, -0.15>, <0.25, 0.45, 0.4> } }
  217. }
  218.  
  219. /*
  220.  * boek in XZ vlak
  221.  */
  222.  
  223. #declare closed_book = composite {
  224.   object { //cover
  225.     intersection {
  226.       union { //outside
  227.         box { <0, -0.025, 0>, <0.2, 0.025, 0.3> }
  228.         intersection {
  229.           quadric { Cylinder_Z scale <0.025, 0.025, 1> }
  230.           box { <-1, -0.03, 0>, <0.1, 0.03, 0.3> }
  231.         }
  232.       }
  233.       union {
  234.         box { <0, -0.02, -0.1>, <0.3, 0.02, 0.4> }
  235.         quadric { Cylinder_Z scale <0.02, 0.02, 1> }
  236.         inverse
  237.       }
  238.     }
  239.     texture {
  240.       color Red
  241.     }
  242.   }
  243.   object {
  244.     union {
  245.       box { <0.0, -0.02, 0.01>, <0.19, 0.02, 0.29> }
  246.       intersection {
  247.         Disk_Z
  248.         scale <0.02, 0.02, 0.14>
  249.         translate <0, 0, 0.15>
  250.       }
  251.     }
  252.     texture { color White }
  253.   }
  254.   translate <0, 0.025, 0>
  255. }
  256.  
  257. /*
  258.  * een keyboard
  259.  *
  260.  * David Anjo gebruikt PV3D.... om een laptop met keyboard te ontwerpen.
  261.  * Hij is gek, met een editor en wat declares kan ik het korter en VEEL
  262.  * sneller!
  263.  */
  264.  
  265. // centimeters!
  266.  
  267. #declare GreyPlastic = texture {
  268.   roughness 0.2
  269.   specular 0.2
  270.   ambient 0.2
  271.   diffuse 0.5
  272.   color red 0.70 green 0.70 blue 0.70
  273. }
  274.  
  275. #declare WhitePlastic = texture {
  276.   roughness 0.2
  277.   specular 0.2
  278.   ambient 0.2
  279.   diffuse 0.5
  280.  
  281.   color red 1 green 1 blue 1
  282. }
  283.  
  284. #declare key_height = 0.5
  285. #declare key_depth = 0.9
  286. #declare key_tilt = 2
  287.  
  288. #declare GreyKey = object {
  289.   box { <0, 0, 0>, <0.9, key_height, key_depth> }
  290.   texture {
  291.     GreyPlastic
  292.   }
  293.   rotate <key_tilt, 0, 0>
  294. }
  295.  
  296. #declare WhiteKey = object {
  297.   box { <0, 0, 0>, <0.9, key_height, key_depth> }
  298.   texture {
  299.     WhitePlastic
  300.   }
  301.   rotate <key_tilt, 0, 0>
  302. }
  303.  
  304. #declare keyboard_base = object {
  305.   box { <-1, -1, -1>, <25, 0, 10> }
  306.   texture { ambient 0.3 diffuse 0.5 color red 1.0 }
  307. }
  308.  
  309. #declare four_white_keys = composite {
  310.   object { WhiteKey translate <0, 0, 0> }
  311.   object { WhiteKey translate <1, 0, 0> }
  312.   object { WhiteKey translate <2, 0, 0> }
  313.   object { WhiteKey translate <3, 0, 0> }
  314.   bounded_by { box { <0, 0, 0>, <4, key_height, 1> } }
  315. }
  316.  
  317. #declare four_grey_keys = composite {
  318.   object { GreyKey translate <0, 0, 0> }
  319.   object { GreyKey translate <1, 0, 0> }
  320.   object { GreyKey translate <2, 0, 0> }
  321.   object { GreyKey translate <3, 0, 0> }
  322.   bounded_by { box { <0, 0, 0>, <4, key_height, 1> } }
  323. }
  324.  
  325. #declare three_grey_keys = composite {
  326.   object { GreyKey translate <0, 0, 0> }
  327.   object { GreyKey translate <1, 0, 0> }
  328.   object { GreyKey translate <2, 0, 0> }
  329.   bounded_by { box { <0, 0, 0>, <3, key_height, 1> } }
  330. }
  331.  
  332. #declare three_white_keys = composite {
  333.   object { WhiteKey translate <0, 0, 0> }
  334.   object { WhiteKey translate <1, 0, 0> }
  335.   object { WhiteKey translate <2, 0, 0> }
  336.   bounded_by { box { <0, 0, 0>, <3, key_height, 1> } }
  337. }
  338.  
  339. #declare elf_white_keys = composite {
  340.   composite { four_white_keys }
  341.   composite { four_white_keys translate <4, 0, 0> }
  342.   composite { three_white_keys translate <8, 0, 0> }
  343. }
  344.  
  345. #declare twelve_white_keys = composite {
  346.   composite { four_white_keys }
  347.   composite { four_white_keys translate <4, 0, 0> }
  348.   composite { four_white_keys translate <8, 0, 0> }
  349. }
  350.  
  351. #declare dertien_white_keys = composite {
  352.   composite { four_white_keys }
  353.   composite { four_white_keys translate <4, 0, 0> }
  354.   composite { four_white_keys translate <8, 0, 0> }
  355.   object { WhiteKey translate <12, 0, 0> }
  356. }
  357.  
  358. #declare vert_grey_two = object {
  359.   box { <0, 0, 0>, <1, key_height, 2> }
  360.   texture { GreyPlastic }
  361.   rotate <key_tilt, 0, 0>
  362. }
  363.  
  364. #declare grey_one_half = object {
  365.   box { <0, 0, 0>, <1.4, key_height, key_depth> }
  366.   texture { GreyPlastic }
  367.   rotate <key_tilt, 0, 0>
  368. }
  369.  
  370. #declare grey_two = object {
  371.   box { <0, 0, 0>, <1.9, key_height, key_depth> }
  372.   texture { GreyPlastic }
  373.   rotate <key_tilt, 0, 0>
  374. }
  375.  
  376. #declare white_two = object {
  377.   box { <0, 0, 0>, <1.9, key_height, key_depth> }
  378.   texture { WhitePlastic }
  379.   rotate <key_tilt, 0, 0>
  380. }
  381.  
  382. #declare grey_threehalf = object {
  383.   box { <0, 0, 0>, <3.4, key_height, key_depth> }
  384.   texture { GreyPlastic }
  385.   rotate <key_tilt, 0, 0>
  386. }
  387.  
  388. #declare grey_twohalf = object {
  389.   box { <0, 0, 0>, <2.4, key_height, key_depth> }
  390.   texture { GreyPlastic }
  391.   rotate <key_tilt, 0, 0>
  392. }
  393.  
  394. #declare spacebar = object {
  395.   box { <0, 0, 0>, <6.9, key_height, key_depth> }
  396.   texture { WhitePlastic }
  397.   rotate <key_tilt, 0, 0>
  398. }
  399.  
  400. #declare bottom_keys = composite {
  401.   object { grey_one_half }    // left ctrl
  402.   object { grey_one_half translate <2.5, 0, 0> }    // left alt
  403.   object { spacebar translate <4, 0, 0> }
  404.   object { grey_one_half translate <11, 0, 0> }    // right alt
  405.   object { grey_one_half translate <13.5, 0, 0> }      // right ctrl
  406. }
  407.  
  408. #declare zxcvb = composite {
  409.   object { grey_one_half }                // left shift
  410.   composite { elf_white_keys translate <1.5, 0, 0> }
  411.   object { grey_twohalf translate <12.5, 0, 0> }    // right shift
  412. }
  413.  
  414. #declare asdfg = composite {
  415.   object { grey_two }    // caps lock
  416.   composite { twelve_white_keys translate <2, 0, 0> }
  417. }
  418.  
  419. #declare qwert = composite {
  420.   object { grey_one_half }    // tab
  421.   composite { twelve_white_keys translate <1.5, 0, 0> }
  422. }
  423.  
  424. #declare topnums = composite {
  425.   composite { dertien_white_keys  }
  426.   object { grey_two translate <13, 0, 0> }    // bksp
  427. }
  428.  
  429. #declare func_keys = composite {
  430.   object { GreyKey }    // esc
  431.   composite { four_white_keys translate <2, 0, 0> }
  432.   composite { four_grey_keys translate <6.5, 0, 0> }
  433.   composite { four_white_keys translate <11, 0, 0> }
  434. }
  435.  
  436. #declare left_part = composite {
  437.   composite { bottom_keys }
  438.   composite { zxcvb translate <0, 0, 1> }
  439.   composite { asdfg translate <0, 0, 2> }
  440.   composite { qwert translate <0, 0, 3> }
  441.   composite { topnums translate <0, 0, 4> }
  442.   composite { func_keys translate <0, 0, 6.5> }
  443.   object { vert_grey_two translate <14, 0, 2> }    // return
  444.   bounded_by { box { <0, 0, 0>, <15, key_height, 7.5> } }
  445. }
  446.  
  447. #declare middle_part = composite {
  448.   composite { three_grey_keys translate <0, 0, 0> }
  449.   object { GreyKey translate <1, 0, 1> }
  450.   composite { three_grey_keys translate <0, 0, 3> }
  451.   composite { three_grey_keys translate <0, 0, 4> }
  452.   composite { three_grey_keys translate <0, 0, 6.5> }
  453.   bounded_by { box { <0, 0, 0>, <3, key_height, 7.5> } }
  454. }
  455.  
  456. #declare numpad = composite {
  457.   object { white_two }
  458.   object { WhiteKey translate <2, 0, 0> }
  459.   composite { three_white_keys }
  460.   composite { three_white_keys translate <0, 0, 1> }
  461.   composite { three_white_keys translate <0, 0, 2> }
  462.   composite { three_white_keys translate <0, 0, 3> }
  463.   composite { three_grey_keys translate <0, 0, 4> }
  464.   
  465.   object { vert_grey_two translate <3, 0, 0> }
  466.   object { vert_grey_two translate <3, 0, 2> }
  467.   object { GreyKey translate <3, 0, 4> }
  468.   bounded_by { box { <0, 0, 0>, <4, key_height, 5> } }
  469. }
  470.  
  471.  
  472. #declare keyboard = composite {
  473.   object { keyboard_base }
  474.   composite { left_part }
  475.   composite { middle_part translate <15.5, 0, 0> }
  476.   composite { numpad translate <19, 0, 0> }
  477.   bounded_by { box { <-1, -1, -1>, <25, 1, 11> }   }
  478.   rotate <-key_tilt, 0, 0>
  479.   scale <0.02, 0.02, 0.02>    // nu in cm
  480. }
  481.  
  482. composite {
  483.   object { altar }
  484.   composite { monitor rotate <0, -30, 0> translate <-0.3, 1.05, 0.3> }
  485.   composite { closed_book rotate <0, 45, 0> translate <0.2, 1.05, 0.3> }
  486.   composite { keyboard translate <-0.1, 1.07, -0.35> }
  487. }
  488.  
  489. #declare hill = object {
  490.   quadric { Ellipsoid translate <0, -0.2, 0> }
  491.   texture {
  492. //    waves 0.3 frequency 0.3 phase 0.0
  493.     color red 0.506 green 0.375 blue 0.102
  494.     ambient 0.3
  495.     diffuse 0.4    // donker
  496.   }  
  497. }
  498.  
  499. /*  END ALTAR */
  500.  
  501. camera { zoom }
  502.  
  503. composite { //hills
  504.   object {
  505.     hill 
  506.     scale <20, 5, 10>
  507.     translate <-30, 0, 50>    
  508.   }
  509.   object {
  510.     hill 
  511.     scale <11, 6.5, 12>
  512.     translate <-33, 0, 44>    
  513.   }
  514.   object {
  515.     hill 
  516.     scale <15, 4, 10>
  517.     rotate <10, 10, 10>
  518.     translate <-20, 0, 50>    
  519.   }
  520.   object {
  521.     hill 
  522.     scale <5, 3, 16>
  523.     rotate <0, 0, 10>
  524.     translate <-50, 0, 40>    
  525.   }
  526.   object {
  527.     hill 
  528.     scale <15, 4, 10>
  529.     rotate <10, 10, 10>
  530.     translate <-60, 0, 50>    
  531.   }
  532.   translate <-20, 0, -15>
  533. }
  534.  
  535. object {
  536.   Floor_Plane
  537. }
  538.  
  539. //object {  Sky_Globe}
  540.  
  541.  
  542. /*********************CRAY****************/
  543.  
  544. /*
  545.  * TEXTURES
  546.  */
  547.  
  548. #declare brownplastic = texture {
  549.   roughness 0.2
  550.   specular 0.2
  551.   ambient 0.2
  552.   diffuse 0.5
  553.   color VeryDarkBrown
  554. }
  555.  
  556. /***************************************************************************
  557.  * OBJECTS                                   *
  558.  ***************************************************************************/
  559.  
  560. /*
  561.  * CRAY-TOWER
  562.  */
  563.  
  564. /*
  565.  * intersect shape, projected on XY plane
  566.  */
  567.  
  568. #declare intersectshape = intersection {
  569.   plane {  <1, 0, 0>, 0 rotate <0, 0, 15> translate <2, 0, 0> }
  570.   intersection {
  571.     plane { <-1, 0, 0>, 0 rotate <0, 0, 10> }
  572.     plane { <0, -1, 0>, 0 }
  573.     inverse
  574.     translate <1.1, 1.2, 0>
  575.   }
  576.   intersection {
  577.     plane { <-1, 0, 0>, 0 }
  578.     plane { <-1, 0, 0>, 0 rotate <0, 0, 60> }
  579.     translate <1.3, 1.0, 0>
  580.     inverse
  581.   }
  582. }
  583.  
  584. #declare crayquart = object
  585. {
  586.   intersection {
  587.     plane { <0, 1, 0>, 3.7 }
  588.     plane { <0, -1, 0>, 0 }
  589.     intersection { intersectshape }
  590.     intersection { intersectshape rotate <0, 45, 0> scale <1.3, 1, 1.3> } // 1.3 = sqrt(2) - epsilon
  591.     intersection { intersectshape rotate <0, 90, 0> }
  592.     plane { <-1, 0, 0>, 0 }
  593.     plane { <0, 0, 1>, 0 }
  594.   }
  595.   texture {
  596.     brownplastic
  597.   }
  598.   bounded_by {
  599.     box { <0, 0, -2>, <2, 3.7, 0> }
  600.   }
  601.   translate <0.2, 0, -0.2>
  602. }
  603.  
  604. #declare computrons = composite {
  605.   object {         // The teraflops are pouring out! :)
  606.     light_source {
  607.       <0, 0.01, 0> color green 5.0
  608.       attenuation 1
  609.       spotlight    
  610.       point_at <0, 1, 0>
  611. //      radius 82
  612. //      falloff 89.5
  613.       tightness 0.3
  614.     }
  615.   }
  616.   //  object { box { <-0.1, 0, -0.1>, <0.1, 0.1, -0.5> } } //small reflector to keep altar in normal color 
  617. }
  618.  
  619. #declare cray = composite {
  620.   object { crayquart rotate <0, 0, 0> }
  621.   object { crayquart rotate <0, 90, 0> }
  622.   object { crayquart rotate <0, 180, 0> }
  623.   object { crayquart rotate <0, 270, 0> }
  624.   composite { computrons }
  625.   bounded_by { box { <-2.3, 0, -2.3>, <2.3, 3.8, 2.3> } }
  626. }
  627.  
  628. /*
  629.  * PEDESTAL
  630.  */
  631. #declare Pedestal_Texture = texture {
  632. //  PinkAlabaster        // Very nice texture
  633. //  scale <0.15, 0.15, 0.15>
  634.   color Pink
  635.   roughness 0.2
  636.   specular 0.2
  637.   reflection 0.1
  638.   ambient 0.7
  639.   diffuse 0.3
  640. }
  641.  
  642. #declare stair_part = box { <-1, 0, -0.5>, <1, 0.125, 0.5> }
  643.  
  644. #declare stair_plane = plane { <0, 0, -1>, 0 rotate <55, 0, 0> translate <0, 0, -4> }
  645.  
  646. #declare puddle = object {
  647.   intersection {
  648.     plane { <0, 1, 0>, 0.1 }
  649.     union {
  650.       sphere { <0, 0, 0>, 3 }
  651.       sphere { <0, 0, 4>, 5 }
  652.     }
  653.   }
  654.   texture {
  655.     colour Blue
  656.     ambient 0.1
  657.     diffuse 0.1
  658.     reflection 0.6
  659. //    ripples 0.4
  660.     scale <10, 10, 10>
  661.   }
  662. }
  663.  
  664. #declare stairs = object {
  665.   union {
  666.     box { stair_part translate <0, 0.000, -3.82148> }
  667.     box { stair_part translate <0, 0.125, -3.642963> }
  668.     box { stair_part translate <0, 0.250, -3.4644445> }
  669.     box { stair_part translate <0, 0.375, -3.285926> }
  670.     box { stair_part translate <0, 0.500, -3.1074075> }
  671.     box { stair_part translate <0, 0.625, -2.928889> }
  672.     box { stair_part translate <0, 0.750, -2.7503705> }
  673.     box { stair_part translate <0, 0.875, -2.571852> }
  674.   }
  675.   bounded_by { box { <-1, -0.1, -4.5>, <1, 1.1, -1.3> } }
  676.   translate <0, 0, 0.2>
  677.   texture { Pedestal_Texture }
  678. }
  679.  
  680. #declare railing = intersection {
  681.   union {
  682.     box { <-1.25, 0, -0.5>, <-1, 0.25, 4> rotate <-35, 0, 0> translate <0, 0, -4>}
  683.     box { <1, 0, -0.5>, <1.25, 0.25, 4> rotate <-35, 0, 0> translate <0, 0, -4>}
  684.   }
  685.   plane { <0, -1, 0>, 0 }
  686.   plane { <0, 1, 0>, 1 }
  687. }
  688.  
  689. // tan(35) == 0.700207
  690. //   /
  691. //  /35  1
  692. //  ?
  693. // 1/tan 35 = ? = 1.428148, ?/8 = 0.1785185
  694.  
  695. #declare pedestal = composite {
  696.   object {
  697.     union {
  698.       intersection {
  699.         plane { <0, -1, 0>, 0 }
  700.         plane { <0, 1, 0>, 1 }
  701.         plane { stair_plane }
  702.         plane { stair_plane rotate <0, 90, 0> }
  703.         plane { stair_plane rotate <0, 270, 0> }
  704.         plane { stair_plane rotate <0, 180, 0> }
  705.       }
  706.       intersection { railing rotate <0, 90, 0> }
  707.       intersection { railing rotate <0, 180, 0> }
  708.       intersection { railing rotate <0, 270, 0> }
  709.       intersection { railing rotate <0, 0, 0> }
  710.     }
  711.     bounded_by {
  712.       box { <-4.5, 0, -4.5>, <4.5, 1, 4.5> }
  713.     }
  714.     texture {
  715.       Pedestal_Texture
  716.     }
  717.   }
  718.   object {
  719.     stairs
  720.     rotate <0, 0, 0>
  721.   }
  722.   object {
  723.     stairs
  724.     rotate <0, 90, 0>
  725.   }
  726.   object {
  727.     stairs
  728.     rotate <0, 180, 0>
  729.   }
  730.   object {
  731.     stairs
  732.     rotate <0, 270, 0>
  733.   }
  734.   bounded_by { box { <-5, 0, -5>, <5, 1, 5> } }
  735. }
  736.  
  737. object {    // mirage
  738.   puddle
  739.   translate <10, 0, 60>
  740. }
  741.  
  742. composite {
  743.   composite {
  744.     pedestal
  745.   }
  746.   composite {
  747.     cray
  748.     translate <0, 1, 0>
  749.   }
  750.   translate <0, 0, 7>
  751. }
  752.  
  753.