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

  1. // Persistence Of Vision Raytracer 
  2. // Standard shapes include file.
  3.  
  4. /*
  5.  
  6.   NOTE:  Some of these shapes, in particular, the "Disk_?" group, have
  7.   been changed in such a way that they will not work correctly with some of
  8.   the old scene files.  The file "shapes.old" is also included in this package
  9.   for exactly this purpose.  The reason for this change was to provide a set
  10.   of shapes that would scale in a consistant fashion.  We apologize for
  11.   any inconvenience that this may cause in the short term, but expect
  12.   that you'll quickly come to agree that this is easier to learn and to
  13.   use.
  14.  
  15.   The quadric Sphere has been duplicated under the preferred name of
  16.   Ellipsoid to differentiate it from the internal sphere primitive.  Please
  17.   refer to Ellipsoid when you wish to use a quadric sphere.
  18.  
  19.  
  20.   Revised shapes.inc
  21.   All primitives scale the same as a sphere with radius=1.
  22.   Changes:
  23.       Disk_X (was X_Disk)
  24.       Disk_Y (was Y_Disk)
  25.       Disk_Z (was Z_Disk)
  26.       QCone_X (was Cone_X)
  27.       QCone_Y (was Cone_Y)
  28.       QCone_Z (was Cone_Z)
  29.   New: 
  30.        UnitBox
  31.        Ellipsoid
  32.        Cone_X (now unit shape intersection instead of infinite quadric)
  33.        Cone_Y (now unit shape intersection instead of infinite quadric)
  34.        Cone_Z (now unit shape intersection instead of infinite quadric)
  35.   Moved: to shapes2.pov
  36.       Square_X
  37.       Square_Y
  38.       Square_Z
  39.       Pyramid
  40.       Tetrahedron
  41. */
  42.  
  43. #declare Ellipsoid = quadric {
  44.    <1.0 1.0 1.0>
  45.    <0.0 0.0 0.0>
  46.    <0.0 0.0 0.0>
  47.    -1.0
  48. }
  49. #declare Sphere = quadric {
  50.    <1.0 1.0 1.0>
  51.    <0.0 0.0 0.0>
  52.    <0.0 0.0 0.0>
  53.    -1.0
  54. }
  55.  
  56. #declare Cylinder_X = quadric {
  57.    <0.0 1.0 1.0>
  58.    <0.0 0.0 0.0>
  59.    <0.0 0.0 0.0>
  60.    -1.0
  61. }
  62.  
  63. #declare Cylinder_Y = quadric {
  64.    <1.0 0.0 1.0>
  65.    <0.0 0.0 0.0>
  66.    <0.0 0.0 0.0>
  67.    -1.0
  68. }
  69.  
  70. #declare Cylinder_Z = quadric {
  71.    <1.0 1.0 0.0>
  72.    <0.0 0.0 0.0>
  73.    <0.0 0.0 0.0>
  74.    -1.0
  75. }
  76.  
  77. // Infinite cones
  78. #declare QCone_X = quadric {
  79.    <-1.0 1.0 1.0>
  80.    <0.0 0.0 0.0>
  81.    <0.0 0.0 0.0>
  82.    0.0
  83. }
  84.  
  85. #declare QCone_Y = quadric {
  86.    <1.0 -1.0 1.0>
  87.    <0.0 0.0 0.0>
  88.    <0.0 0.0 0.0>
  89.    0.0
  90. }
  91.  
  92. #declare QCone_Z = quadric {
  93.    <1.0 1.0 -1.0>
  94.    <0.0 0.0 0.0>
  95.    <0.0 0.0 0.0>
  96.    0.0
  97. }
  98.  
  99. // Unit cones    
  100. //
  101. // Use: intersection { Cone_X }
  102. //
  103. #declare Cone_X = 
  104. intersection { 
  105.    quadric { QCone_X translate <0 1 0> } 
  106.    box { <-2 -1 -2> <2 1 2> }
  107.    scale <.5 1 .5>
  108. }
  109. #declare Cone_Y = 
  110. intersection { 
  111.    quadric { QCone_Y  translate <0 1 0>} 
  112.    box { <-2 -1 -2> <2 1 2> }
  113.    scale <.5 1 .5>
  114. }
  115. #declare Cone_Z = 
  116. intersection { 
  117.    quadric { QCone_Z translate <0 1 0>} 
  118.    box { <-2 -1 -2> <2 1 2> }
  119.    scale <.5 1 .5>
  120. }
  121.  
  122. #declare Plane_YZ = quadric {
  123.    <0.0 0.0 0.0>
  124.    <0.0 0.0 0.0>
  125.    <1.0 0.0 0.0>
  126.    0.0
  127. }
  128.  
  129. #declare Plane_XZ = quadric {
  130.    <0.0 0.0 0.0>
  131.    <0.0 0.0 0.0>
  132.    <0.0 1.0 0.0>
  133.    0.0
  134. }
  135.  
  136. #declare Plane_XY = quadric {
  137.    <0.0 0.0 0.0>
  138.    <0.0 0.0 0.0>
  139.    <0.0 0.0 1.0>
  140.    0.0
  141. }
  142.  
  143. /* y^2 + z^2 - x = 0 */
  144. #declare Paraboloid_X = quadric {
  145.    <0.0  1.0  1.0>
  146.    <0.0  0.0  0.0>
  147.    <-1.0 0.0  0.0>
  148.    0.0
  149. }
  150.  
  151. /* x^2 + z^2 - y = 0 */
  152. #declare Paraboloid_Y = quadric {
  153.    <1.0  0.0  1.0>
  154.    <0.0  0.0  0.0>
  155.    <0.0 -1.0  0.0>
  156.    0.0
  157. }
  158.  
  159. /* x^2 + y^2 - z = 0 */
  160. #declare Paraboloid_Z = quadric {
  161.    <1.0  1.0  0.0>
  162.    <0.0  0.0  0.0>
  163.    <0.0  0.0 -1.0>
  164.    0.0
  165. }
  166.  
  167. /* y - x^2 + z^2 = 0 */
  168. #declare Hyperboloid = quadric {
  169.    < -1.0  0.0  1.0>
  170.    <  0.0  0.0  0.0>
  171.    <  0.0  1.0  0.0>
  172.    0.0
  173. }
  174.  
  175. #declare Hyperboloid_Y = quadric {  /* Vertical hyperboloid */
  176.    <1.0 -1.0  1.0>          /*                      */
  177.    <0.0  0.0  0.0>          /*            \   /     */
  178.    <0.0  0.0  0.0>          /* Like this:  ) (      */
  179.    -1.0                     /*            /   \     */
  180. }
  181.  
  182.  
  183. // Cube using the procedural box primitive
  184. #declare UnitBox = box { <-1.0 -1.0 -1.0> <1.0 1.0 1.0> }
  185.  
  186. // This primitive used to be an intersection of six planes.  For speed, it's now
  187. // an intersection of a box and nothing else.
  188. #declare Cube = intersection { box { <-1 -1 -1> <1 1 1>} }
  189.  
  190. // The Disk primitives are "capped" cylinders of unit length.
  191. //
  192. // Note: These three shapes have been changed for Version 1.0.
  193. // They are now "unit" size, the same as a sphere with a radius of 1.
  194. // They will now scale evenly in all directions.
  195. // Old files may need to be modified to work with these shapes, but
  196. // I think you'll find them to be more consistant with the rest of the
  197. // POV-Ray primitives and easier for novices to understand.
  198.  
  199. #declare Disk_X = intersection {       /* Capped cylinder, Length in x axis */
  200.    quadric { Cylinder_X  }
  201.    plane { <1.0 0.0 0.0> -1 inverse  }
  202.    plane { <1.0 0.0 0.0>  1  }
  203. }
  204.  
  205. #declare Disk_Y = intersection {       /* Capped cylinder, Length in y axis */
  206.    quadric { Cylinder_Y  }
  207.    plane { <0.0 1.0 0.0> -1 inverse }
  208.    plane { <0.0 1.0 0.0>  1 }
  209. }
  210.  
  211. #declare Disk_Z = intersection {       /* Capped cylinder, Length in z axis */
  212.    quadric { Cylinder_Z  }
  213.    plane { <0.0 0.0 1.0> -1 inverse  }
  214.    plane { <0.0 0.0 1.0>  1  }
  215. }
  216.