home *** CD-ROM | disk | FTP | other *** search
/ Mega A/V / mega_av.zip / mega_av / GRAPHUTL / POVSCN.ZIP / INCLUDE.ZIP / SHAPES2.INC < prev    next >
Text File  |  1992-07-15  |  6KB  |  160 lines

  1. // Persistence Of Vision Raytracer 
  2. // Standard shapes include file #2.
  3. //
  4. /* Contents:
  5.            Tetrahedron
  6.            Octahedron
  7.            Dodecahedron
  8.            Icosahedron
  9.            Rhomboid
  10.            Hexagon
  11.            HalfCone_Y
  12.            Pyramid
  13.            Pyramid2 
  14.            Square_X
  15.            Square_Y
  16.            Square_Z
  17. */
  18.  
  19.  
  20.  
  21. // Shapes by Tom Price [75300,620]:
  22. #declare Tetrahedron = intersection {
  23.    plane { <0.0 -1.0 0.0> 1.0 }
  24.    plane { <0.0 0.0 -1.0> 1.0 rotate <19.47 0.0 0.0> }
  25.    plane { <0.0 0.0 -1.0> 1.0 rotate <19.47 -120.0 0.0> }
  26.    plane { <0.0 0.0 -1.0> 1.0 rotate <19.47 120.0 0.0> }
  27. }
  28.  
  29. #declare Octahedron = intersection {
  30.    plane { <0.0 0.0 1.0> 1.0 rotate <35.26438968275 0.0 0.0> }
  31.    plane { <0.0 0.0 1.0> 1.0 rotate <-35.26438968275 0.0 0.0> }
  32.    plane { <0.0 0.0 -1.0> 1.0 rotate <35.26438968275 0.0 0.0> }
  33.    plane { <0.0 0.0 -1.0> 1.0 rotate <-35.26438968275 0.0 0.0> }
  34.  
  35.    plane { <1.0 0.0 0.0> 1.0 rotate <0.0 0.0 -35.26438968275> }
  36.    plane { <1.0 0.0 0.0> 1.0 rotate <0.0 0.0 35.26438968275> }
  37.    plane { <-1.0 0.0 0.0> 1.0 rotate <0.0 0.0 -35.26438968275> }
  38.    plane { <-1.0 0.0 0.0> 1.0 rotate <0.0 0.0 35.26438968275> }
  39. }
  40.  
  41. #declare Dodecahedron = intersection {
  42.    plane { <0.0 0.0 -1.0>  1.0 rotate <-26.56505117708 0.0 0.0> }
  43.    plane { <0.0 0.0 -1.0>  1.0 rotate <-26.56505117708 -72.0 0.0> }
  44.    plane { <0.0 0.0 -1.0>  1.0 rotate <-26.56505117708 -144.0 0.0> }
  45.    plane { <0.0 0.0 -1.0>  1.0 rotate <-26.56505117708 -216.0 0.0> }
  46.    plane { <0.0 0.0 -1.0>  1.0 rotate <-26.56505117708 -288.0 0.0> }
  47.  
  48.    plane { <0.0 0.0 -1.0>  1.0 rotate <26.56505117708 -36.0 0.0> }
  49.    plane { <0.0 0.0 -1.0>  1.0 rotate <26.56505117708 -108.0 0.0> }
  50.    plane { <0.0 0.0 -1.0>  1.0 rotate <26.56505117708 -180.0 0.0> }
  51.    plane { <0.0 0.0 -1.0>  1.0 rotate <26.56505117708 -252.0 0.0> }
  52.    plane { <0.0 0.0 -1.0>  1.0 rotate <26.56505117708 -324.0 0.0> }
  53.  
  54.    plane { <0.0 1.0 0.0> 1.0 }
  55.    plane { <0.0 -1.0 0.0> 1.0 }
  56. }
  57.  
  58. #declare Icosahedron = intersection {
  59.  
  60.    plane { <0.0 0.0 -1.0> 1.0 rotate <52.6625 0.0 0.0> }
  61.    plane { <0.0 0.0 -1.0> 1.0 rotate <52.6625 -72.0 0.0> }
  62.    plane { <0.0 0.0 -1.0> 1.0 rotate <52.6625 -144.0 0.0> }
  63.    plane { <0.0 0.0 -1.0> 1.0 rotate <52.6625 -216.0 0.0> }
  64.    plane { <0.0 0.0 -1.0> 1.0 rotate <52.6625 -288.0 0.0> }
  65.  
  66.    plane { <0.0 0.0 -1.0> 1.0 rotate <10.8125 0.0 0.0> }
  67.    plane { <0.0 0.0 -1.0> 1.0 rotate <10.8125 -72.0 0.0> }
  68.    plane { <0.0 0.0 -1.0> 1.0 rotate <10.8125 -144.0 0.0> }
  69.    plane { <0.0 0.0 -1.0> 1.0 rotate <10.8125 -216.0 0.0> }
  70.    plane { <0.0 0.0 -1.0> 1.0 rotate <10.8125 -288.0 0.0> }
  71.  
  72.    plane { <0.0 0.0 -1.0> 1.0 rotate <-52.6625 -36.0 0.0> }
  73.    plane { <0.0 0.0 -1.0> 1.0 rotate <-52.6625 -108.0 0.0> }
  74.    plane { <0.0 0.0 -1.0> 1.0 rotate <-52.6625 -180.0 0.0> }
  75.    plane { <0.0 0.0 -1.0> 1.0 rotate <-52.6625 -252.0 0.0> }
  76.    plane { <0.0 0.0 -1.0> 1.0 rotate <-52.6625 -324.0 0.0> }
  77.  
  78.    plane { <0.0 0.0 -1.0> 1.0 rotate <-10.8125 -36.0 0.0> }
  79.    plane { <0.0 0.0 -1.0> 1.0 rotate <-10.8125 -108.0 0.0> }
  80.    plane { <0.0 0.0 -1.0> 1.0 rotate <-10.8125 -180.0 0.0> }
  81.    plane { <0.0 0.0 -1.0> 1.0 rotate <-10.8125 -252.0 0.0> }
  82.    plane { <0.0 0.0 -1.0> 1.0 rotate <-10.8125 -324.0 0.0> }
  83. }
  84.  
  85. // Shapes by others
  86.  
  87. // Convenient  finite cone primitive, pointing up in the Y axis
  88. // Cone_Y, X & Z in SHAPES.INC should be used instead of this shape
  89. #declare HalfCone_Y = intersection {
  90.    quadric { // QCone_Y
  91.       <1.0 -1.0 1.0>
  92.       <0.0 0.0 0.0>
  93.       <0.0 0.0 0.0>
  94.        0.0
  95.    }
  96.    plane { <0 1 0 >  0 }
  97.    plane { <0 1 0 > -2 inverse }
  98.    translate <0 1 0>
  99.    scale <0.5 1 0.5>
  100. }
  101.  
  102. /* Hexagonal Solid, axis along x */
  103. #declare  Hexagon = intersection {
  104.    plane { <0.0 0.0 1.0> 1.0  }  /* Rotate 90 in z axis to stand up */
  105.    plane { <0.0 0.0 1.0> 1.0 rotate <60.0 0.0 0.0> }
  106.    plane { <0.0 0.0 1.0> 1.0 rotate <120.0 0.0 0.0> }
  107.    plane { <0.0 0.0 1.0> 1.0 rotate <180.0 0.0 0.0> }
  108.    plane { <0.0 0.0 1.0> 1.0 rotate <240.0 0.0 0.0> }
  109.    plane { <0.0 0.0 1.0> 1.0 rotate <300.0 0.0 0.0> }
  110.    plane { <1.0 0.0 0.0> 1.0 }
  111.    plane { <1.0 0.0 0.0> -1.0 inverse }
  112. }
  113.  
  114. /* Three Dimensional 4-Sided Diamond */
  115. #declare Rhomboid = intersection {
  116.    plane { <-1.0  0.0  0.0>  1.0 rotate <0.0 0.0 -30.0> }
  117.    plane { < 1.0  0.0  0.0>  1.0 rotate <0.0 0.0 -30.0> }
  118.    plane { < 0.0  0.0  1.0>  1.0 }
  119.    plane { < 0.0  0.0 -1.0>  1.0 }
  120.    plane { < 0.0  1.0  0.0>  1.0 }
  121.    plane { < 0.0 -1.0  0.0>  1.0 }
  122. }
  123.  
  124. // Classic four-sided pyramids.
  125. // The first can't be used correctly in CSG, the second can.
  126. #declare Pyramid = intersection {
  127.    union { // This isn't true CSG, it's just used for convenience
  128.       triangle { <-1 0 -1> <+1 0 -1> <0 1 0>  }
  129.       triangle { <+1 0 -1> <+1 0 +1> <0 1 0>  }
  130.       triangle { <-1 0 +1> <+1 0 +1> <0 1 0>  }
  131.       triangle { <-1 0 +1> <-1 0 -1> <0 1 0>  }
  132.    }
  133.    scale <1 2 1>
  134.    translate <0 -1 0>
  135. }
  136. #declare Pyramid2 = intersection {
  137.    plane { <1 0 0> 1  rotate <0 0 40> }
  138.    plane { <-1 0 0> 1 rotate <0 0 -40>}
  139.    plane { <0 0 1> 1  rotate <-40 0 0> }
  140.    plane { <0 0 -1> 1 rotate <40 0 0> }
  141.    plane { <0 -1 0> 0 }
  142.    translate <0 -1 0>
  143. }
  144.  
  145. // These next three are finite planes.
  146. #declare Square_X =  union {    /* Scale-able plane in x */
  147.    triangle { < 0  1 -1> < 0 -1  1> < 0  1  1>  }
  148.    triangle { < 0  1 -1> < 0 -1  1> < 0 -1 -1>  }
  149. }
  150.  
  151. #declare Square_Y =  union {    /* Scale-able plane in y */
  152.    triangle { <-1 0 1>   < 1 0 -1>  <1 0 1>  }
  153.    triangle { <-1 0  1>  < 1 0 -1>  <-1 0 -1>}
  154. }
  155.  
  156. #declare Square_Z =  union {    /* Scale-able plane in z */
  157.    triangle { <-1 1 0.0> <1 -1 0.0> <-1 -1 0.0> }
  158.    triangle { <-1 1 0.0> <1 -1 0.0> <1 1 0.0>   }
  159. }
  160.