// Laboratório 2 de Computação Gráfica
// Last edited on 2003-10-15 00:20:19 by stolfi
// Luciano Ludka Cordeiro - ra992077

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

#declare ctr = < 0.00, 0.00, 2.00 >;
#declare camdir = < 21.00, 0.00, 8.00 >;

camera {
  location  ctr + 1.00*camdir  // Posição do observador.
  right     -0.60*x                 // Largura RELATIVA da imagem.
  up        0.80*y                 // Altura RELATIVA da imagem.      
  sky       z                      // 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 {
  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.6 * < 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 vermelho = 
  texture {
    pigment { color rgb <1.00, 0.00, 0.00> }
    finish { diffuse 0.8 specular 0.5 roughness 0.005 ambient 0.1 }
  }

#declare prata = 
  texture {
    pigment { color rgb < 0.92, 0.92, 0.92 > }
  }

#declare prata_dois =
  texture{
    pigment { color rgb < 0.80, 0.90, 1.00 > }
  }

#declare chapeu =
  cone {
    <0.00, 0.00, 0.00>, 1.80
    <0.00, 0.00, 0.75>, 1.00 
    texture { vermelho } 
    translate <0.00, 0.00, 8.50>
  }
  
#declare cabeca =
  sphere {
    < 0.00, 0.00, 0.00 >, 2.00
    translate <0.00, 0.00, 7.00> 
    texture { prata }
  }
  
#declare corpo = 
  cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, 0.00, 5.00 >,
    2.00
    scale<1.00, 1.50, 1.00>
    texture { prata }
  }
  
#declare braco_esquerdo =
  cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, 5.00, 0.00 >,
    1.00
    rotate <-45.00, 0.00, 0.00>
    translate<0.00, 2.00, 4.50>
    texture { prata_dois }
  }

#declare braco_direito =
  object { braco_esquerdo scale <1.00, -1.00, 1.00> }

#declare perna_esquerda =
  cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, 0.00, -5.00 >,
    1.00
    translate <0.00, 1.20, 0.00>
    texture { prata_dois } 
  }

#declare perna_direita =
  object {
    perna_esquerda 
    rotate <10, -10, 0>
    scale <1.00, -1.00, 1.00>    
  }
  
#declare robozinho =
  union{
     object { cabeca } 
     object { corpo }
     object { braco_esquerdo }
     object { braco_direito }
     object { perna_esquerda }
     object { perna_direita }
  }

// Cena a ser visualizada
union{
  object { robozinho }
  object { chapeu }
}