// Persistence Of Vision raytracer version 2.0 sample file. // By Drew Wells // Title-"Tomb" // a haunted tomb on a hill, gravestones, rusty fence, pumpkin patch. // - Drew Wells cis 73767,1244 // 11/90 rev 7/92 #include "shapes.inc" #include "colors.inc" #include "textures.inc" #include "stones.inc" /* Camera */ camera { direction <0.0, 0.0, 1.5> up <0.0, 1.0, 0.0> right <-4/3, 0.0, 0.0> translate < -15.0, 5.0, 120.0> look_at <10.0, 12.0, 55.0> } #declare TombTex = texture { Stone8 finish { ambient .1 } scale 0.5 } #declare HeadTex = texture { Stone3 } #declare ColTex = texture { Stone13 finish { phong .3 } scale .2 } #declare Rust2 = texture { Stone1 } #declare Yellow_Clouds = pigment { bozo turbulence 0.6 colour_map { [0.0 0.3 colour red 0.9 green 0.5 blue 0.3 colour red 0.6 green 0.4 blue 0.0] [0.3 0.6 colour red 0.6 green 0.4 blue 0.0 colour red 0.4 green 0.4 blue 0.0 filter 1.0] [0.6 0.8 colour red 0.4 green 0.4 blue 0.0 filter 1.0 colour Clear] [0.8 1.001 colour Clear colour Clear] } } #declare Sunset_Sky = pigment { gradient y colour_map { [0.0 0.4 colour red 0.8 green 0.0 blue 0.0 colour red 0.4 green 0.0 blue 0.4] [0.4 0.6 colour red 0.4 green 0.0 blue 0.4 colour red 0.0 green 0.0 blue 0.2] [0.6 1.001 colour red 0.0 green 0.0 blue 0.2 colour red 0.0 green 0.0 blue 0.1] } scale 700.0 } /*************************************************/ /* Define objects for use in scene */ /*************************************************/ #declare Cross = union { /* Tried to make celtic cross, but vga resolution is too coarse */ /* intersection { object { Cylinder_Z scale 0.4 translate <0.0, 0.45, 0.0> } plane { -z, 0.02 } plane { z, 0.02 } } */ /*vertical part*/ intersection { /*top & bottom*/ plane { y, 1.0 } plane { -y, 2.0 } /*front & back*/ plane { z, 0.12 } plane { -z, 0.12 } /*left & right*/ plane { x, 0.15 } plane { -x, 0.15 } } /*horizontal part*/ intersection { /*top & bottom*/ plane { y, 0.6 } plane { -y, -0.3 } /*front & back*/ plane { z, 0.12 } plane { -z, 0.12 } /*left & right walls*/ plane { x, 0.7 } plane { -x, 0.7 } } bounded_by { box { <-.8, -2.1, -.2>, <.8, 1.1, .8> } } texture { HeadTex scale 0.1 finish { ambient 0.1 diffuse 0.7 } } } #declare Headstone = union { intersection { object { Cylinder_Z } plane { -z, 0.1 } plane { z, 0.1 } } intersection { /*top & bottom*/ plane { y, 0.0 } plane { -y, 2.0 } /*front & back*/ plane { z, 0.1 } plane { -z, 0.1 } /*left & right */ plane { x, 1.0 } plane { -x, 1.0 } } texture { HeadTex scale <0.1, 0.2, 0.1> finish { ambient 0.1 diffuse 0.7 } } } #declare Pole = object { Cylinder_Y scale <0.1, 1.0, 0.1> } #declare Xpole = object { Cylinder_X scale <0.1, 0.1, 0.1> } /* Rusty iron gate & fence - object should have been composite to avoid the */ /* "carved from one piece" look. */ #declare Gate = union { intersection { object { Xpole } plane { x, 8.0 } plane { -x, 2.0 } translate 6.5*y } intersection { object { Xpole } plane { x, 8.0 } plane { -x, 2.0 } translate 1.9*y } intersection { object { Pole } plane { y, 7.5 } plane { -y, 0.0 } translate 1.0*x } sphere { <1.0, 7.5, 0.0>, 0.3 } intersection { object { Pole } plane { y, 7.75 } plane { -y, 0.2 } translate 2.5*x } sphere { <2.5, 7.75, 0.0>, 0.3 } intersection { object { Pole } plane { y, 8.0 } plane { -y, 0.2 } translate 4.0*x } sphere { <4.0, 8.0, 0.0>, 0.3 } intersection { object { Pole } plane { y, 7.75 } plane { -y, 0.2 } translate 5.5*x } sphere { <5.5, 7.75, 0.0>, 0.3 } intersection { object { Pole } plane { y, 7.5 } plane { -y, 0.2 } translate 7.0*x } sphere { <7.0, 7.5, 0.0>, 0.3 } bounded_by { box { <0.0, 0.0, -1.0>, <8.0, 9.0, 1.0> } } texture { Rust2 finish { ambient 0.2 diffuse 0.9 } } } /* a rectangular pad to serve as a footing for the column */ #declare BasePad = box { <-1.2, -0.25, -1.2>, <1.2, 0.25, 1.2> pigment { colour red 0.6 green 0.6 blue 0.4 } } #declare ColTop = union { box { <-1.5, -.1, -1.5>, <1.5, .2, 1.5> } box { <-1.25, .2, -1.25> <1.25, .4, 1.25> } box { <-1, .4, -1> <1, .6, 1> } pigment { color red .6 green .6 blue .4 } } #declare Beam = object { Cylinder_Y } #declare Beam2 = object { Cylinder_Y inverse scale <.3, 1, .3> translate 1.4*x } #declare Beam3 = intersection { object { Beam scale <1.2, 1, 1.2> } object { Beam2 } object { Beam2 rotate -45*y } object { Beam2 rotate -90*y } object { Beam2 rotate -135*y } object { Beam2 rotate 180*y } object { Beam2 rotate 45*y } object { Beam2 rotate 90*y } object { Beam2 rotate 135*y } plane { y, 8 } plane { -y, 0 } pigment { color red .8 green 0 blue .0 } } #declare Column = union { object { Beam3 texture { ColTex } } //object { BasePad texture { ColTex finish {phong 0} } translate <0, 0, 0> } object { ColTop texture { ColTex finish {phong 0} } translate <0, 8, 0> } } #declare Tomb = union { difference { box { <-10, -5, -7.5>, <10, 10, 7.5> } // bulk box { <-3, -5, -7.0>, <3, 7, 7.6> } // door } /* Foundation */ box { <-11, -2, -10.5>, <11, -1, 10.5> } box { <-12, -3, -11>, <12, -2, 11> } box { <-13, -4, -12>, <13, -3, 12> } box { <-14, -5, -13>, <14, -4, 13> } bounded_by { box { <-14.1, -5.1, -13.1>, <14.1, 10.1, 18.6> } } } #declare InnerBeams = union { intersection { object { Beam } plane { y, 8.0 } plane { -y, 2.0 } translate < 5.0, 0.0, 7.5> } intersection { object { Beam } plane { y, 8.0 } plane { -y, 2.0 } translate < -5.0, 0.0, 7.5> } pigment { Blue } } #declare Pointy = object { /*pointy part*/ intersection { plane { -y, 1 } plane { -z, 1 } plane { z, 1 rotate 27*y rotate 40*x } plane { z, 1 rotate -27*y rotate 40*x } plane { +x, 0 rotate 70*z } plane { -x, 0 rotate -70*z } scale <3, 4, 1> translate < 0, 12, 8.5> } pigment { Blue } } #declare CornerBeams = union { intersection { object { Beam scale <1.5, 1.0, 1.5>} plane { y, 10.0 } plane { -y, 2.0 } translate < 10.0, 0.0, 7.5> } intersection { object { Beam scale <1.5, 1.0, 1.5> } plane { y, 10.0 } plane { -y, 2.0 } translate <-10.0, 0.0, 7.5> } sphere { <-10.0, 10.0, 7.5>, 1.5 } sphere { < 10.0, 10.0, 7.5>, 1.5 } pigment { Blue } } /* Ghost in tomb doorway */ #declare Figure = intersection { object { Beam scale <2.3, 1.0, 2.3> } plane { y, 8.0 } plane { -y, 2.0 } translate 4.3*z texture { pigment { granite /* Use any ghost image you like for the tomb doorway or comment */ /* out the Figure in TombAll */ /*imagemap { gif "ghost.gif" once interpolate 2.0 } */ scale < 6.5, 8.0, 6.5 > translate < -1.0, 7.5, 4.3 > quick_color Black } finish { ambient 0.10 diffuse 0.3 } } } /* TombAll is the completed tomb */ #declare TombAll = union { object { Tomb texture { TombTex } } object { InnerBeams texture { Stone21 } } object { Pointy texture { Stone4 } } object { CornerBeams texture { Stone18 scale <.5, .5, .5> } } } /* Pumpkin parts */ #declare Stem = intersection { object { Pole } plane { y, 0.04 rotate <0.0, -10.0, -10.0> } plane { -y, 1.0 } translate <0.0, 0.3, 0.0> texture { pigment { color red 0.04 green 0.33 blue 0.05 } normal { bumps 0.5 scale 0.2 } finish { ambient 0.1 diffuse 0.9 } } } #declare Slice = sphere { <0, 0, 0>, 1 translate <0.0, 0.0, 0.5> scale <0.28, 0.30, 0.40> } #declare Pumpkin = union { object { Slice } object { Slice rotate -20.0*y } object { Slice rotate -40.0*y } object { Slice rotate -60.0*y } object { Slice rotate -80.0*y } object { Slice rotate -100.0*y } object { Slice rotate -120.0*y } object { Slice rotate -140.0*y } object { Slice rotate -160.0*y } object { Slice rotate -180.0*y } object { Slice rotate -200.0*y } object { Slice rotate -220.0*y } object { Slice rotate -240.0*y } object { Slice rotate -260.0*y } object { Slice rotate -280.0*y } object { Slice rotate -300.0*y } object { Slice rotate -320.0*y } object { Slice rotate -340.0*y } bounded_by { sphere { <0, 0, 0>, 1.5 } } texture { pigment { color red 0.5 green 0.22 blue 0.1 } normal { bumps 0.3 scale 0.1 } finish { ambient 0.1 diffuse 0.9 phong 0.75 phong_size 30.0 } } } /*******************************************/ /* Scene description */ /*******************************************/ object { Cross scale <1.7, 2.0, 1.0> rotate -15.0*x translate <-16.0, 7.7, 61.5> } object { Headstone scale <1.0, 1.0, 1.0> rotate 15.0*x translate <-14.0, 4.0, 76.0> } object { Headstone scale <1.0, 1.0, 1.0> translate <12.0, 4.0, 74.0> } object { Headstone scale <1.0, 1.0, 1.0> rotate -10.0*x translate <18.0, 8.0, 70.0> } object { Cross scale <1.5, 2.0, 1.0> rotate -15.0*x translate <17.0, 10.0, 60.0> } object { Cross scale <1.5, 2.0, 1.0> rotate -15.0*x translate <26.0, 10.0, 70.0> } object { Cross scale <1.5, 2.0, 1.0> rotate <-15.0, 0.0, -10.0> translate <31.0, 10.0, 78.0> } /* Little Pumpkin Patch */ object { Pumpkin scale <1.5, 2.0, 1.5> translate <5.0, 1.55, 95.0> } object { Stem scale <1.5, 2.5, 1.5> translate < 5.0, 1.55, 95.0> } object { Pumpkin scale <1.5, 2.5, 1.5> translate < 11.0, 1.6, 90.0> } object { Stem scale <1.5, 2.5, 1.5> translate < 11.0, 1.6, 90.0> } /* Ghastly Tomb!*/ object { TombAll rotate <7.0, 15.0, 0.0> translate <0.0, 16.0, 38.0> } /*left entry gate*/ object { Gate translate <-9.0, 0.0, 88.0> } /*right entry gate*/ object { Gate rotate <-10.0, -160.0, 0.0> translate <7.0, 0.0, 87.5> } /*Use gate object to make left & right fence*/ object { Gate translate <-19.0, 0.0, 88.0> } object { Gate translate <-31.0, 0.0, 88.0> } object { Gate translate <9.0, 0.0, 88.0> } object { Gate translate <19.0, 0.0, 88.0> } /* Columns to hold the fence and gates up */ object { Column translate <-20.0, 0.0, 88.0> } object { Column translate <-10.0, 0.0, 88.0> } object { Column translate < 8.0, 0.0, 88.0> } object { Column translate < 18.0, 0.0, 88.0> } /*hill under tomb*/ object { Paraboloid_Y scale <40.0, 10.0, 77.0> rotate <0.0, 0.0, 180.0> translate <0.0, 21.0, -28.0> texture { pigment { color red 0.5 green 0.6 blue 0.2 } normal { bumps 0.8 scale 5.0 } finish { ambient 0.1 diffuse 0.7 } } } /*hill to right of tomb*/ object { Paraboloid_Y scale <30.0, 10.0, 40.0> rotate 180.0*z translate <40.0, 14.0, 50.0> texture { pigment { color red 0.6 green 0.6 blue 0.1 } normal { bumps 0.8 scale < 7.0, 5.0, 5.0> } finish { ambient 0.1 diffuse 0.7 } } } /* Ground */ plane { y, 1.0 texture { pigment { color red 0.6 green 0.6 blue 0.1 } normal { bumps 0.7 scale < 1.0, 1.0, 1.0> } finish { ambient 0.1 diffuse 0.7 } } } /*The Sun*/ light_source { <150.0, 30.0, 1200.0> color red 1 green .8 blue .65 } /* Sky - gradient sunset*/ sphere { <0.0, 0.0, 0.0>, 2000.0 inverse texture { pigment { Sunset_Sky translate 200.0*y scale 1.2 quick_color Green } finish { ambient 0.6 diffuse 0.0 } } } /* Clouds - uses a sky texture with the sky portion defined as transparent */ /* so the gradient behind it is visible */ sphere { <0.0, 0.0, 0.0>, 1997.0 inverse texture { pigment { Yellow_Clouds scale <1000.0 30.0 100.0> quick_color Green } finish { ambient 0.7 diffuse 0.0 } } }