home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 1995 January / pcw-0195.iso / polyray / dat / misc / allprims.pi < prev    next >
Text File  |  1994-12-31  |  8KB  |  279 lines

  1. // Sample file demonstrating all (well almost all) of the primitives that
  2. // exist in Polyray.
  3. // Author - Alexander Enzmann
  4.  
  5. viewpoint {
  6.    from <0,150,-200>
  7.    at <0,0,0>
  8.    up <0,1,0>
  9.    angle 8.5
  10.    resolution 720, 450
  11.    aspect 1.6
  12.    }
  13.  
  14. background midnightblue
  15.  
  16. light <0.5, 0.5, 0.5>, <0, 50, -10>
  17. spot_light white, < 20, 10, -20>, < 15,0,-15>, 5, 40, 42
  18. spot_light white, <-20, 10, -20>, <-15,0,-15>, 5, 40, 42
  19.  
  20. include "..\colors.inc"
  21. include "..\texture.inc"
  22.  
  23. // In alphabetical order even...
  24.  
  25. // Start with some flags so we can turn the individual
  26. // objects on and off.  This is real useful during
  27. // testing.
  28. define bezier_flag     1
  29. define blob_flag       1
  30. define box_flag        1
  31. define cone_flag       1
  32. define cylinder_flag   1
  33. define disc_flag       1
  34. define function_flag   1
  35. define glyph_flag      1
  36. define height_flag     1
  37. define lathe_flag      1
  38. define nurb_flag       1
  39. define parabola_flag   1
  40. define polygon_flag    1
  41. define polynomial_flag 1
  42. define sweep_flag      1
  43. define sphere_flag     1
  44. define torus_flag      1
  45.  
  46. // Get the definition of a teapot
  47. include "teapot.inc"
  48. if (bezier_flag == 1)
  49.    teapot {
  50.       rotate <0, 20, 0>
  51.       scale <1.5, 1.5, 1.5>
  52.       translate <22, 0, 2>
  53.       shiny_red
  54.       }
  55.  
  56. if (blob_flag == 1)
  57. // Multipoint blob.  This blob is carved from white marble.
  58. object {
  59.    blob 0.5:
  60.       1.0, 1.0, <0.75, 0, 0>,
  61.       1.0, 1.0, <0.75*cos(radians(120)), 0.75*sin(radians(120)), 0>,
  62.       1.0, 1.0, <0.75*cos(radians(240)), 0.75*sin(radians(240)), 0>,
  63.       1.0, 1.0, <0.2, 1.2, 0.8>,
  64.       1.0, 1.0, <-0.2, 1.2, -0.8>,
  65.       1.0, 1.0, <0.3, -1, -0.7>,
  66.       1.0, 1.0, <0, 0, 0>,
  67.       1.0, 1.0, <-0.1, 0, 0.3>,
  68.       1.0, 1.0, <0,-2, -0.5>,
  69.       1.0, 1.0, <-0.5, -1, -1.4>
  70.    uv_steps 20, 20, 20
  71.    white_marble
  72.    translate <0, 2, 0>
  73.    scale <1.5, 1, 2>
  74.    rotate <0, 80, 0>
  75.    translate <-12, 0, -20>
  76.    }
  77.  
  78. if (box_flag == 1)
  79. // Box primitive
  80. object {
  81.    box <-2, 0,-2>, <2, 2, 2>
  82.    rotate <40, 30, 0>
  83.    translate <-5, 3, 16>
  84.    matte_blue
  85.    }
  86.  
  87. if (cone_flag == 1)
  88. // Cone primitive
  89. object {
  90.    cone <0, 0, 0>, 3, <0, 6, 0>, 0
  91.    translate <8, 0, 16>
  92.    reflective_gold
  93.    }
  94.  
  95. if (cylinder_flag == 1)
  96. // A Cylinder that has an image wrapped around it
  97. object {
  98.    cylinder <0, 0, 0>, <0, 6, 0>, 3
  99.    texture {
  100.       special surface {
  101.          color cylindrical_imagemap(image("cylimg.gif"), P, 1)
  102.          ambient 0.5
  103.          diffuse 0.5
  104.          }
  105.       scale <1, 6, 1>
  106.       }
  107.    rotate <0,-90, 0>
  108.    translate <-20, 0, 0>
  109.    }
  110.  
  111. if (disc_flag == 1)
  112. // Disc primitive.  These are so boring by themselves that
  113. // I've added some ripple to the surface just to make it
  114. // a little more interesting.
  115. object {
  116.    disc <0, 0, 0>, <0, 1, 0>, 4
  117.    blue_ripple
  118.    rotate <-20, -30, 0>
  119.    translate <-5, 3, -15>
  120.    }
  121.  
  122. if (height_flag == 1)
  123. object {
  124.    height_fn 20, 20, -4, 4, -4, 4,
  125.       4 * cos(3 * sqrt(x^2 + z^2)) * exp(-0.5 * sqrt(x^2 + z^2))
  126.    shiny_green
  127.    translate <15, 2, -10>
  128.    }
  129.  
  130. if (function_flag == 1)
  131. // Implicit function.  This surface is nice and wavy.
  132. // It is small in this image cause these things take
  133. // forever to render.
  134. object {
  135.    object {
  136.       function y - sin(3 * x * z)
  137.       uv_steps 40, 40, 40
  138.       bounding_box <-2, -1, -2>, <2, 1, 2>
  139.       }
  140.    & object { box <-2, -1, -2>, <2, 1, 2> }
  141.    shiny_yellow
  142.    scale <1.5, 1, 1.5>
  143.    rotate <0, -30, 0>
  144.    translate <-10, 2.2, 5>
  145.    }
  146.  
  147. if (lathe_flag == 1)
  148. // Lathe primitive
  149. object {
  150.    lathe 2, <0, 1, 0>, 5,
  151.         <3, 0>, <0.5, 2>, <4, 3>, <3, 7>, <0, 9>
  152.    scale <0.8, 0.8, 0.8>
  153.    shiny_coral
  154.    translate <0, 0, 8>
  155.    }
  156.  
  157. if (nurb_flag == 1)
  158. // Sample NURB surface
  159. object {
  160.    nurb 4, 6, 4, 5,
  161.         [0, 0, 0, 0, 1.5, 1.5, 3, 3, 3, 3], // Non-uniform knot vector
  162.         [0, 0, 0, 0, 1, 2, 2, 2, 2],        // Uniform open knot vector
  163.     [[< 0, 0, 0>, < 1, 0, 3>,    < 2, 0,-3>,      < 3, 0, 3>, < 4, 0, 0>],
  164.      [< 0, 1, 0>, < 1, 1, 0>,    < 2, 1, 0>,      < 3, 1, 0>, < 4, 1, 0>],
  165.      [< 0, 2, 0>, < 1, 2, 0, 2>, < 2, 2, 5, 0.5>, < 3, 2, 0>, < 4, 2, 0>],
  166.      [< 0, 3, 0>, < 1, 3, 0, 2>, < 2, 3, 5, 0.5>, < 3, 3, 0>, < 4, 3, 0>],
  167.      [< 0, 4, 0>, < 1, 4, 0>,    < 2, 4, 0, 20>,  < 3, 4, 0>, < 4, 4, 0>],
  168.      [< 0, 5, 0>, < 1, 5,-3>,    < 2, 5, 3>,      < 3, 5,-3>, < 4, 5, 0>]]
  169.    translate <-2, -2.5, 0>
  170.    rotate <-90, -30, 0>
  171.    uv_steps 32, 16
  172.    shiny_red
  173.    }
  174.  
  175. if (parabola_flag == 1)
  176. // Parabola primitive.  Sort of like a salt shaker in this
  177. // orientation.
  178. object {
  179.    parabola <0, 6, 0>, <0, 0, 0>, 3
  180.    translate <16, 0, 16>
  181.    steely_blue
  182.    }
  183.  
  184. if (polynomial_flag == 1)
  185. // Polynomial surface.  This is the devils curve, one of
  186. // my personal favorites.
  187. object {
  188.      object {
  189.     polynomial x^4 + 2*x^2*z^2 - 0.36*x^2 - y^4 + 0.25*y^2 + z^4
  190.     bounding_box <-2, -2, -0.5>, <2, 2, 0.5>
  191.     }
  192.    & object { box <-2, -2, -0.5>, <2, 2, 0.5> }
  193.    scale <2, 2, 2>
  194.    rotate <20, 10, 0>
  195.    shiny_red
  196.    translate <-15, 4, -10>
  197.    }
  198.  
  199. if (sphere_flag == 1)
  200. // Create a sphere with a checker texture
  201. object {
  202.    sphere <0, 0, 0>, 3
  203.    texture {
  204.       checker shiny_red, shiny_blue
  205.       }
  206.    translate <-15, 3, 16>
  207.    }
  208.  
  209. // Sweep surfaces - there are several so that the various
  210. // forms can be demonstrated.
  211. define r0 2
  212. define r1 4
  213. define dt (2.0 * 3.14159265) / 14
  214.  
  215. if (glyph_flag == 1)
  216. // First sweep is made from connected line segments
  217. object {
  218.    glyph 1
  219.       contour 15,
  220.          <r0*cos( 1*dt), r0*sin( 1*dt)>, <r1*cos( 2*dt), r1*sin( 2*dt), 1>,
  221.          <r0*cos( 3*dt), r0*sin( 3*dt)>, <r1*cos( 4*dt), r1*sin( 4*dt), 1>,
  222.          <r0*cos( 5*dt), r0*sin( 5*dt)>, <r1*cos( 6*dt), r1*sin( 6*dt), 1>,
  223.          <r0*cos( 7*dt), r0*sin( 7*dt)>, <r1*cos( 8*dt), r1*sin( 8*dt), 1>,
  224.          <r0*cos( 9*dt), r0*sin( 9*dt)>, <r1*cos(10*dt), r1*sin(10*dt), 1>,
  225.          <r0*cos(11*dt), r0*sin(11*dt)>, <r1*cos(12*dt), r1*sin(12*dt), 1>,
  226.          <r0*cos(13*dt), r0*sin(13*dt)>, <r1*cos(14*dt), r1*sin(14*dt), 1>,
  227.          <r0*cos( 1*dt), r0*sin( 1*dt)>
  228.    rotate <-90, 0, 0>
  229.    translate <0, 0, -20>
  230.    matte_red
  231.    }
  232.  
  233. if (sweep_flag == 1)
  234. // Second sweep is made from connected quadratic splines.
  235. object {
  236.    sweep 2, <0, 1, 0>, 16,
  237.       <0, 0, 1>, <0, 1, 1>, <-1, 1, 1>, <-1, -1, 1>, <2, -1, 1>, <2, 3, 1>,
  238.       <-4, 3, 1>, <-4, -4, 1>, <4, -4, 1>, <4, -11, 1>, <-2, -11, 1>,
  239.       <-2, -7, 1>, <2, -7, 1>, <2, -9, 1>, <0, -9, 1>, <0, -8, 1>
  240.    translate <0, 0, -4>
  241.    rotate <0,-45, 0>
  242.    translate <10, 0, -18>
  243.    shiny_yellow
  244.    }
  245.  
  246. if (torus_flag == 1)
  247. // Torus primitive.  Just for grins lets make it out of wood.
  248. object {
  249.    torus sqrt(40), sqrt(12), <0, 0, 0>, <0, 1, 0>
  250.    root_solver Sturm
  251.    wooden { scale <8, 8, 8> rotate <30, 20, 0> }
  252.    scale <0.3, 0.3, 0.3>
  253.    rotate <-40, 0, 0>
  254.    translate <10, 3, 0>
  255.    }
  256.  
  257. // Make a hexagonal polygon with hexagonal texturing
  258. define rp 30                         // Radius of the polygon
  259. define ang -(2.0 * 3.14159265) / 6   // 60 degrees in radians
  260. if (polygon_flag == 1)
  261. object {
  262.    polygon 6,
  263.          <rp*cos( 1*ang), 0, rp*sin( 1*ang)>,
  264.          <rp*cos( 2*ang), 0, rp*sin( 2*ang)>,
  265.          <rp*cos( 3*ang), 0, rp*sin( 3*ang)>,
  266.          <rp*cos( 4*ang), 0, rp*sin( 4*ang)>,
  267.          <rp*cos( 5*ang), 0, rp*sin( 5*ang)>,
  268.          <rp*cos( 6*ang), 0, rp*sin( 6*ang)>
  269.    texture {
  270.       hexagon
  271.          xz_wheel_texture,
  272.          sapphire_agate,
  273.          whorl_texture
  274.       scale <6, 6, 6>
  275.       }
  276.    translate <0, -0.05, 0>
  277.    }
  278.  
  279.