// Danilo Morelli Miyasiro  RA: 015832
// Trabalho Prático 2

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

camera {
  location  <  -5.00, -5.00, 2.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, 1.50 >  // 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.10, 0.80, 1.00 > }
    finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 }
  }

#declare amarelo = 
  texture {
    pigment { color rgb < 1.00, 0.80, 0.10 > }
    finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 }
  }
  
#declare base =
  box {
    < 0, 0, 0 >,
    < 2, 2, 0.2 >
    texture { azul }
  }

#declare teto =
  box {
    < 0, 0, 3 >,
    < 2, 2, 3.2 >
    texture { azul }
  }

#declare fundo =
  box {
    < 0, 2, 0 >,
    < 2, 2.3, 3.2 >
    texture { azul }
  }

#declare eixo =
  cylinder {
    < 1, 1, 3.2 >
    < 1, 1, 0.8 >
    0.1
    texture { amarelo }
  }

#declare buraco =
  cylinder {
    < 1, 1, 0.1 >
    < 1, 1, 0.3 >
    0.5
    texture { azul }
  }

#declare helice =
  sphere {
    < 1, 1, 0.8 >
    0.2
    texture { amarelo }
  }

#declare pa =
  box {
    < 0.95, 0.70, 0.75 >,
    < 1.05, 1.3, 0.85 >
    texture { amarelo }
  }
  
// Aqui está a cena, finalmente:

union {
  difference {
    object { base }
    object { buraco }
  }
  object { teto }
  object { fundo }
  union {
    object { eixo }
    object { helice }
    object { pa }
  }
}