// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2003-10-22 04:14:20 by stolfi

global_settings { max_trace_level 10 }

// ======================================================================
// CÂMERA 

#declare ctr = < 0.00, 12.00, 0.00 >;
#declare camdir = < 20.00, 20.00, 100.00 >;

camera {
  location  ctr + 0.80*camdir  // Posição do observador.
  right     -1.0*x                 // Largura RELATIVA da imagem.
  up        0.75*y                 // Altura RELATIVA da imagem.      
  sky       y                      // Qual direção é "para cima"?
  look_at   ctr  // Para onde a câmera está apontando.
} 
// Nota: os parâmetros "right" e "up" devem ter a mesma proporção
// que os parâmetros ${WIDTH} e ${HEIGHT} no Makefile.

// ======================================================================
// FONTES DE LUZ

light_source {
  1000 * < -30.0, +10.0, +50.0 >              // Posição da lâmpada.
  color rgb 0.8 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

light_source {
  1000 * < +30.0, +10.0, +50.0 >              // Posição da lâmpada.
  color rgb 0.8 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

light_source {
  1000 * < +5.0, +40.0, +20.0 >              // Posição da lâmpada.
  color rgb 0.8 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

// ======================================================================
// DESCRIÇÃO DA CENA 

background{ color rgb 0.8*< 0.90,0.95,1.00 > }

#declare verde = texture {
    finish {
        ambient 0.1 diffuse 0.1
        reflection 0.25
        specular 1 roughness 0.001
    }
    //interior { ior 1.5 }
    pigment { color <0.0,0.5,0.0> filter 1 }
}

#declare cristal = texture {
    finish {
        ambient 0.1 diffuse 0.1
        reflection 0.25
        specular 1 roughness 0.001
    }
    //interior { ior 1.5 }
    pigment { color <0.9,0.9,1.0> filter 1 }
}

#declare dourado = texture {
    pigment { rgb <1.0,1.0,0.0> }
    finish {
        ambient 0.05 diffuse 0.05
        reflection <1.0,1.0,0.0>
        specular 0.2 roughness 0.05
    }
}        
  
#declare preto = texture {
    pigment { color rgb < 0.6 0.6, 0.6 > }
    finish { diffuse 0.8 specular 0.2 roughness 0.005 ambient 0.1 }
}


#declare cilindro = cylinder {
    < 0.0, 0.0, 0.0 >,
    < 0.0, 20.0, 0.0 >,
    2.0
    texture { preto }
    //interior { ior 10 }
}

#declare bico = cone {
    < 0, 20, 0 >, 3.0    
    < 0, 32, 0>, 0    
    texture { dourado }
    //interior { ior 10}
}

#declare rosquinha = torus {
    2, 1              // major and minor radius
    texture { verde }
    interior { ior 10}
   
}



#declare chao =  plane { 
    <0, 1, 0>, 0 //16
    texture {
        pigment { checker 
          color rgb < 1.0, 1.0, 1.0 >,
          color rgb < 0.8, 0.9, 1.0 >
        }
        finish { diffuse 0.8  ambient 0.1 }
    }
}

#declare torre = union {
  object { cilindro }
  object { bico }
  object { rosquinha scale 2 translate 20*y }
  object { rosquinha  translate 26*y }
}

#declare torres = union {
  object {torre translate <-20,0,-20> }
  object {torre translate <-20,0,+20> }
  object {torre translate <+20,0,-20> }
  object {torre translate <+20,0,+20> }
}

#declare base = box {
    <  0,  0,  0>,
    < 16, 16, 16>
    texture { preto }
}

#declare exte = sphere {
    < 8, 16, 8 >, 8.00
    texture { cristal }
    interior { ior 1.5}
}

#declare inte = sphere {
    < 8, 16, 8 >, 7.99
    texture { cristal }
    interior { ior 1.5}
}

#declare abobada = difference {
    object { exte }
    object { inte }
}

#declare castelo = union {
    object { base }
    object { abobada }
    translate <-8,0,-8>
}  
  
union {
  object { torres }
  object { castelo }  
  object { chao }
}