// Last edited on 2009-07-23 17:15:40 by stolfilocal
// Processed by remove-cam-lights

background{ color rgb < 0.75, 0.80, 0.85 > }

#declare BLUE = 
  texture {
    pigment { color rgb < 0.10, 0.20, 1.00 > }
    finish { diffuse 0.8 specular 0.1 roughness 0.005 ambient 0.1 }
  }

#declare YELLOW = 
  texture {
    pigment { color rgb < 1.0, 1.0, 0.0 > }
    finish { diffuse 0.8 specular 0.1 roughness 0.005 ambient 0.1 }
  }
#declare GREEN = 
 texture {
   pigment { color rgb < 0.20, 0.80, 0.10 > }
   finish { diffuse 0.8 specular 0.1 roughness 0.005 ambient 0.1 }
 }

#declare RED = 
 texture {
   pigment { color rgb < 1.00, 0.00, 0.00 > }
   finish { diffuse 0.8 specular 0.1 roughness 0.005 ambient 0.1 }
 }

#declare SILVER = 
 texture {
   pigment { color rgb < 0.86, 0.86, 0.86 > }
   finish { diffuse 0.8 specular 0.1 roughness 0.005 ambient 0.1 }
 }

#declare GOLDENROD = 
 texture {
   pigment { color rgb < 0.854, 0.64, 0.125 > }
   finish { diffuse 0.8 specular 0.1 roughness 0.005 ambient 0.1 }
 }

#declare rec_cube =
 difference{
  box{
   <0,0,0>,
   <9,9,9>
  }
  box{
   <-3,3,3>,
   <12,6,6>
  }
  box{
   <3,-3,3>,
   <6,12,6>
  }
  box{
   <3,3,-3>,
   <6,6,12>
  }
 }

#declare escala = 1/3;

#macro my_cube(n)
 #if(n = 0)
  object{ rec_cube }  
 #else
  merge{
   object{ my_cube(n-1) scale<escala,escala,escala>}
   object{ my_cube(n-1) scale<escala,escala,escala> translate <3,0,0>}
   object{ my_cube(n-1) scale<escala,escala,escala> translate <6,0,0>}

   object{ my_cube(n-1) scale<escala,escala,escala> translate <0,3,0>}

   object{ my_cube(n-1) scale<escala,escala,escala> translate <6,3,0>}

   object{ my_cube(n-1) scale<escala,escala,escala> translate <0,6,0>}
   object{ my_cube(n-1) scale<escala,escala,escala> translate <3,6,0>}
   object{ my_cube(n-1) scale<escala,escala,escala> translate <6,6,0>}

   object{ my_cube(n-1) scale<escala,escala,escala> translate <0,0,3>}

   object{ my_cube(n-1) scale<escala,escala,escala> translate <6,0,3>}

   object{ my_cube(n-1) scale<escala,escala,escala> translate <0,6,3>}

   object{ my_cube(n-1) scale<escala,escala,escala> translate <6,6,3>}

   object{ my_cube(n-1) scale<escala,escala,escala> translate <0,3,6>}

   object{ my_cube(n-1) scale<escala,escala,escala> translate <6,3,6>}
  
   object{ my_cube(n-1) scale<escala,escala,escala> translate <0,0,6>}
   object{ my_cube(n-1) scale<escala,escala,escala> translate <3,0,6>}
   object{ my_cube(n-1) scale<escala,escala,escala> translate <6,0,6>}

   object{ my_cube(n-1) scale<escala,escala,escala> translate <0,6,6>}
   object{ my_cube(n-1) scale<escala,escala,escala> translate <3,6,6>}
   object{ my_cube(n-1) scale<escala,escala,escala> translate <6,6,6>}

  }
 #end
#end

#macro wall(nwalls)
 #declare num = 0;
 merge{
  #while(num < nwalls)
   object{
    my_cube(1)
    translate <num*9,0,0>
   }
   object{
    my_cube(1)
    translate <num*9,0,9>
   }
  
   #declare num = num + 1;
  #end 

  scale<1/3,1/3,1/3>
 }
#end

#declare castle =
 merge{
  cylinder {
   <7.5,7.5,10>
   <7.5,7.5,0>,2
  } 
  object{
   wall(5)
  } 

  object{
   wall(5)
   translate <0, 12, 0>
  } 

  object{
   wall(3)
   rotate <0, 0, 90>
   translate <3,3,0>
  } 

  object{
   wall(3)
   rotate <0, 0, 90>
   translate <15, 3, 0>
  } 
 }

object{castle texture{YELLOW}}

// Original camera parameters:
// #local cam_ctr = <3.00,3.00,0.00>
// #local cam_vec = (<-6.0,-12.00,20.00>-<3.00,3.00,0.00>)
// #local cam_sky = z

#include "camlight.inc"
camlight(<3.00,3.00,0.00>,<10,7,5>,50.0,z,1.0)