//Last edited on 2003-10-16 20:03:49 by stolfi

#include "colors.inc"
#include "woods.inc" // T_Wood1 - T_Wood35
#include "metals.inc"

global_settings {
  assumed_gamma 1.0
  max_trace_level 5
}

// ----------------------------------------


#declare ctr = <0,9,0>;
#declare camdir = < -30,30,-45>;

camera {
  location  ctr + 0.65*camdir //mais perto  
  right     -1.0*x                 // Largura RELATIVA da imagem.
  up        0.75*y                 // Altura RELATIVA da imagem.
  sky y
  look_at   ctr
}

background { color rgb < 0.6,0.8,1.0 > }
// sky_sphere {
//   pigment {
//     gradient y
//     color_map {
//       [0.0 rgb <0.6,0.7,1.0>]
//       [0.7 rgb <0.0,0.1,0.8>]
//     }
//   }
// }

light_source {
  0
  color rgb <1,1,1>       
  area_light
  <4, 0, 0> <0, 0, 4> 
  4, 4                
  adaptive 0          
  jitter              
  scale 30
  translate ctr + 10*(vrotate(camdir,-50*y) + 50*y)
}

#declare prata = 
material {
    texture { 
    pigment { Silver } 
    finish {
      ambient 0.05 diffuse 0.05
      reflection Silver metallic
      specular 0.5 roughness 0.001
    }
  }
}

#declare prata_escura = 
material {
    texture { 
    pigment { rgb 0.1 } 
    finish {
      ambient 0.05 diffuse 0.05
      reflection rgb 0.1 metallic
      specular 0.5 roughness 0.001
    }
  }
}

#declare ouro = 
material {
    texture { 
    pigment { BrightGold } 
    finish {
      ambient 0.05 diffuse 0.05
      reflection BrightGold metallic
      specular 0.5 roughness 0.001
    }
  }
}

#declare cristal_azul_luz =
material {
	texture {
		pigment { rgbf <0.1, 0.1, 0.9, 1> }
		finish {
			ambient 4.8 diffuse 0.1
			reflection 0.25
			specular 1 roughness 0.001
		}
	}
	interior {
		ior 1.1
	}
}

#declare cristal_azul =
material {
	texture {
		pigment { rgbf <0.1, 0.1, 0.9, 1> }
		finish {
			ambient 0.1 diffuse 0.1
			reflection 0.25
			specular 1 roughness 0.001
		}
	}
	interior {
		ior 1.1
	}
}

#declare cristal_amarelo =
material {
	texture {
		pigment { rgbf <0.9, 0.9, 0.1, 1> }
		finish {
			ambient 0.1 diffuse 0.1
			reflection rgbf <0.9, 0.9, 0.1, 1>
			specular 1 roughness 0.001
		}
	}
	interior {
		ior 1.1
	}
}

#declare cristal =
material {
	texture {
		pigment { rgbf 1 }
		finish {
			ambient 0.1 diffuse 0.1
			reflection 0.25
			specular 1 roughness 0.001
		}
	}
	interior {
		ior 1.1
	}
}

#declare PiramideBase = intersection {
   plane { < 1, 0,  0>, 1  rotate <  0, 0,  40>}
   plane { <-1, 0,  0>, 1  rotate <  0, 0, -40>}
   plane { < 0, 0,  1>, 1  rotate <-40, 0,   0>}
   plane { < 0, 0, -1>, 1  rotate < 40, 0,   0>}
   plane { <0, -1, 0>, 0 }
   translate <0 ,-1, 0>
   
   bounded_by {box {<-1,0,-1>, <1,1,1>}}
}                                      

#declare PiramideCentral = 
union {
	object { PiramideBase material { cristal } }
	object { PiramideBase scale 0.5 material { prata } }
}

#declare Pylon =
union {
	union {
		object { PiramideBase translate <0, 0.1, 0> }
		object { PiramideBase rotate <180, 0, 0> }
		material { cristal_azul_luz }
		scale <3, 10, 3>
		translate <0, 2, 0>
	}
	torus {
		3, 0.8
		translate <0, 2.7, 0>
		material { ouro }
	}
}




#declare anel =
torus {
	5, 1.4
	material { prata }
}		

#declare PiramideAdjacente =
object {
	PiramideBase
	material { cristal_amarelo }
}


#declare Pilastras = union {
	difference {
		box {
			<-6, -0.1, -6>, <6, 12, 6>
		}
		box {
			<-12.1, -0.2, -12.1>, <12.1, 12.1, 12.1>
			rotate <0, 0, 45>
			translate <0, 6, 0>
		}
		box {
			<-6, -0.2, -6>, <6, 12.1, 6>
			rotate <0, 45, 0>
		}
	}                  
	material { cristal_azul }
}

object { Pilastras scale <1, 1.5, 1> }
object { PiramideCentral rotate <0, 45, 0> scale <10, 40, 10> }
object { anel translate <0, 19, 0> }
object { Pylon scale 0.55 translate <-11.2, 5, 0> }
object { Pylon scale 0.55 translate <11.2, 5, 0> }
object { Pylon scale 0.55 translate <0, 5, -11.2> } 
object { Pylon scale 0.55 translate <0, 5, 11.2> }

plane {
  y, 0
  //  material { prata_escura }
  pigment { checker color rgb <1.0,0.9,0.7>, color rgb <0.8,0.7,0.5> scale 2 }
}