// Persistence Of Vision raytracer version 2.0 sample file. // By Tom Price #include "shapes.inc" #include "colors.inc" #include "textures.inc" camera { location <0.0, 50.0, -150.0> up <0.0, 1.0, 0.0> right <4/3, 0.0, 0.0> look_at <0.0, 0.0, 0.0> } light_source { <50.0, 150.0, -250.0> colour White } light_source { <-50.0, 150.0, -250.0> colour White } /*The Sky*/ sphere { <0.0, -49000.0, -200.0>, 50000.0 inverse texture { pigment { Bright_Blue_Sky scale <5000.0, 1000.0, 5000.0> quick_color SkyBlue } finish { crand 0.05 ambient 0.7 diffuse 0.0 } } } /* The wood grain tabletop */ box { <-1, -1, -1>, <1, 1, 1> texture { pigment { Pine_Wood scale <7.0, 1.0, 0.7> rotate -30.0*y } finish { ambient 0.1 diffuse 0.5 reflection 0.3 brilliance 3.0 } } scale <200.0, 1.0, 200.0> translate -42.0*y } /* a salami */ #declare Salami = union { /* the outside skin */ union { cylinder { -10*x, 10*x, 20 } sphere { <-10.0, 0.0, 0.0>, 20.0 } texture { pigment { colour red 0.5 green 0.2 blue 0.2 } finish { crand 0.05 ambient 0.1 diffuse 0.8 reflection 0.2 brilliance 3.0 phong 0.3 phong_size 20.0 } } } cylinder { -10*x, 10.01*x, 19.0 texture { pigment { Pink } finish { crand 0.1 ambient 0.3 diffuse 0.7 } } } } /* a salami slice */ #declare Slice = union { /* the outside skin */ cylinder { -0.5*x, 0.5*x, 20 texture { pigment { colour red 0.5 green 0.2 blue 0.2 } finish { crand 0.05 ambient 0.1 diffuse 0.8 reflection 0.2 brilliance 3.0 phong 0.3 phong_size 20.0 } } } cylinder { -0.51*x, 0.51*x, 19.0 texture { finish { crand 0.1 ambient 0.3 diffuse 0.7 } pigment { Pink } } } } /* a wedge of cheese*/ #declare Cheese = intersection { object { Cylinder_Y scale <10.0, 1.0, 10.0> } plane { y, 20.0 } plane { y, 0.0 inverse } plane { x, 5.0 rotate 30.0*y } plane { x, -5.0 rotate -30.0*y inverse } object { Cylinder_X scale <1.0, 1.0, 1.5> rotate -20.0*y translate 10.0*y inverse } object { Cylinder_X scale <1.0, 2.0, 1.5> rotate <0.0, 20.0, -30> translate <0.0, 12.0, -4.0> inverse } object { Cylinder_X scale <1.0, 1.0, 1.0> translate <0.0, 15.0, -9.0> inverse } object { Cylinder_X scale <1.0, 2.0, 1.5> rotate <0.0, -30.0, -30.0> translate <0.0, 15.0, 5.0> inverse } object { Cylinder_X scale <1.0, 1.5, 1.5> rotate <0.0, 0.0, -20.0> translate <0.0, 7.0, -9.0> inverse } object { Cylinder_X scale <1.0, 1.0, 1.0> rotate <0.0, 10.0, 10.0> translate <0.0, 10.0, -2.0> inverse } object { Cylinder_X scale <1.0, 1.0, 1.2> rotate <0.0, -10.0, 0.0> translate <0.0, 5.0, 0.0> inverse } object { Cylinder_X scale <1.0, 1.3, 1.0> translate <0.0, 3.0, -3.0> inverse } texture { pigment { colour red 1.0 green 0.8 blue 0.0 } finish { crand 0.05 ambient 0.2 diffuse 0.8 } } bounded_by { intersection { object { Cylinder_Y scale <10.01, 1.0, 10.01> } plane { y, 20.01 } plane { y, -0.01 inverse } } } } /* a slice of cheese*/ #declare CheeseSlice = intersection { object { Cylinder_Y scale <10.0, 1.0, 10.0> } plane { y, 20.0 } plane { y, 0.0 inverse } plane { x, 0.2 } plane { x, -0.2 inverse } object { Cylinder_X scale <1.0, 1.0, 1.5> rotate <0.0, -20.0, 30> translate <0.0, 10.0, 0.0> inverse } object { Cylinder_X scale <1.0, 2.0, 1.5> rotate <0.0, 20.0, -30> translate <0.0, 12.0, -4.0> inverse } object { Cylinder_X scale <1.0, 1.0, 1.0> translate <0.0, 15.0, -9.0> inverse } object { Cylinder_X scale <1.0, 2.0, 1.5> rotate <0.0, -30.0, -30.0> translate <0.0, 15.0, 5.0> inverse } object { Cylinder_X scale <1.0, 1.5, 1.5> rotate <0.0, 0.0, -20.0> translate <0.0, 7.0, -9.0> inverse } object { Cylinder_X scale <1.0, 1.0, 1.0> rotate <0.0, 10.0, 10.0> translate <0.0, 10.0, -2.0> inverse } object { Cylinder_X scale <1.0, 1.0, 1.2> rotate <0.0, -10.0, 0.0> translate <0.0, 3.0, 5.0> inverse } object { Cylinder_X scale <1.0, 1.3, 1.0> rotate <0.0, 0.0, 0.0> translate <0.0, 2.0, 2.0> inverse } texture { pigment { colour red 1.0 green 0.8 blue 0.0 } finish { crand 0.05 ambient 0.2 diffuse 0.8 } } bounded_by { intersection { object { Cylinder_Y scale <10.01, 1.0, 10.01> } plane { y, 20.01 } plane { y, -0.01 inverse } plane { x, 0.3 } plane { x, -0.3 inverse } } } } /* An oval glass dish */ #declare Dish = union { intersection { sphere { <0, 0, 0>, 1 scale <100.0, 25.0, 25.0> } sphere { <0, 0, 0>, 1 scale <95.0, 24.0, 24.0> inverse } plane { y, 0.0 } plane { y, -5.0 inverse } } intersection { object { Cylinder_Y scale <95.0, 1.0, 24.0> } plane { y, -4.0 } plane { y, -5.0 inverse } } texture { pigment { Clear } finish { ambient 0.1 diffuse 0.8 refraction 0.95 ior 1.5 reflection 0.05 brilliance 2.0 } } bounded_by { intersection { object { Cylinder_Y scale <100.01, 1.0, 25.01> } plane { y, 0.01 } plane { y, -5.01 inverse } } } } /* a slice of bread */ #declare BreadSlice = union { union { box { <-10, -1, -10>, <10, 1, 10> } intersection { object { Cylinder_Y scale <11.0, 1.0, 7.0> translate <0.0, 0.0, 10.0> } plane { y, 1.0 } plane { y, -1.0 inverse } } texture { pigment { colour red 0.4 green 0.3 blue 0.1 } finish { crand 0.05 ambient 0.3 diffuse 0.7 reflection 0.1 brilliance 2.0 } } } union { box { <-9.5, -1.01, -9.5>, <9.5, 1.01, 9.5> } intersection { object { Cylinder_Y scale <10.5, 1.0, 6.5> translate <0.0, 0.0, 10.0> } plane { y, 1.01 } plane { y, -1.01 inverse } } texture { pigment { colour red 0.7 green 0.6 blue 0.45 } finish { crand 0.1 ambient 0.3 diffuse 0.7 } } } bounded_by { box { <-10.1, -1.1, -10.1>, <10.1, 1.0, 10.1> } } } /* Now to put the scene together*/ union { object { Dish scale <0.7, 1.0, 1.2> translate <0.0, -36.0, -25.0> } object { Salami rotate 35.0*y translate <-30.0, -20.0, -20.0> } object { Cheese scale 2.0 rotate 25.0*y translate <30.0, -40.0, -25.0> } translate 25.0*z rotate -15.0*y translate <-35.0, 0.0, 20.0> } /* now a sandwich */ union { object { Slice rotate 90.0*y rotate 90.0*x translate <45.0, -33.0, -35.0> } object { CheeseSlice scale <1.0, 2.0, 2.0> rotate -90.0*y rotate 90.0*x translate -16.0*z rotate 30.0*y translate <45.0, -35.0, -35.0> } object { BreadSlice scale <1.6, 2.0, 1.0> rotate -150.0*y translate <45.0, -38.0, -35.0> } object { BreadSlice scale <1.6, 2.0, 1.0> rotate -150.0*y translate <45.0, -29.0, -35.0> } translate <0.0, 15.0, 10.0> } /*spotlight on the sandwich*/ intersection { object { Cylinder_Y scale <7.5, 1.0, 7.5> } object { Cylinder_Y scale <7.4, 1.0, 7.4> inverse } plane { y, 50.0 } plane { y, 0.0 inverse } translate <45.0, 100.0, -25.0> texture { pigment { White } finish { ambient 0.3 diffuse 0.7 } } } light_source { <45.0, 145.0, -25.0> colour White } object { Slice rotate 90.0*y rotate 65.0*x translate <-30.0, 25.0, 45.0> } object { Slice rotate 90.0*y rotate 60.0*x translate <35.0, 25.0, 25.0> } object { CheeseSlice scale <1.0, 2.0, 2.0> rotate -90.0*y rotate 50.0*x translate <-20.0, 35.0, 30.0> } object { CheeseSlice scale <1.0, 2.0, 2.0> rotate -90.0*y rotate 70.0*x translate <65.0, 15.0, 35.0> } object { BreadSlice scale <1.6, 2.0, 1.0> rotate <-40.0, -60.0, 0.0> translate <-60.0, 25.0, 35.0> } object { BreadSlice scale <1.6, 2.0, 1.0> rotate <60.0, 50.0, 0.0> translate <70.0, 0.0, 30.0> }