// 
//Felipe Rover RA 016049 - MC930 - TP02 - 21-03-2007

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

camera {
  location  <  20.00, 20.00, 20.00 >  // Posição do observador.
  right     -0.75*x                // Largura RELATIVA da imagem.
  up        1.00*y                 // Altura RELATIVA da imagem.      
  sky       z                      // Qual direção é "para cima"?
  look_at   <  0.00, 0.00, 0.00 >  // 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 {
  10 * < +50.0, +30.0, +50.0 >              // Posição da lâmpada.
  color rgb 1.2 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

light_source {
  10 * < +50.0, -10.0, +10.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.75, 0.80, 0.85 > }

#declare raio = 2.000;

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

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

#declare vermelho = 
  texture {
    pigment { color rgb < 1.00, 0.00, 0.00 > }
    finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 }
  }
  
#declare bola =
  sphere {
    < 0.00, 0.00, 0.00 >, 2.00 
    texture { vermelho }
  }
  
#declare furo = 
  cylinder {
    < -5.00, 0.00, 0.00 >,
    < +5.00, 0.00, 0.00 >,
    0.50
    texture { vermelho }
  }
  
#declare caixa1 =
   box {
     < 1.00, 0.00, 5.00 >,
     < 0.00, 1.00, 0.00 >
     texture { verde }
   } 

#declare caixa2 =
   box {
     < 1.00, 0.00, 6.00 >,
     < 0.00, 10.00, 5.00 >
     texture { verde }
   }

#declare caixa3 =
   box {
     < 1.00, 9.00, 5.00 >,
     < 0.00, 10.00, 3.00 >
     texture { verde }
   }

#declare cone2 = 
   cone {
     < 0.00, 0.00, -5.00 >, 3.00,
     < 0.00, 0.00, 0.00 >,  2.00
     texture { azul }
   }


#declare mexedor = 
  difference {
    object { bola }
    object { furo }
  }
  
// Aqui está a cena, finalmente:

object { mexedor
         translate < 0.00, 9.50, 1.00 >  
 }

union {
   object { caixa1 }
   object { caixa2 }
   object { caixa3 }
   }
object { cone2 }