// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2003-10-14 21:26:50 by stolfi

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

#declare ctr = <  0.00, 5.00, 0.00 >;
#declare camdir = < -10.00, 20.00, 70.00 >;

camera {
  location  ctr + 0.75*camdir  // Posição do observador.
  right     -0.60*x                 // Largura RELATIVA da imagem.
  up        0.80*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 {
  10 * < +0.0, +10.0, +50.0 >              // Posição da lâmpada.
  color rgb 1.0 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

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

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

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

light_source {
  10 * < -50.0, -50.0, -50.0 >              // Posição da lâmpada.
  color rgb 0.3 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
}

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

background{ color rgb < 0.3, 0.5, 0.7 > }

#declare raio = 2.000;

#declare tinta_A = 
  texture {
    pigment { color rgb < 0.10, 0.80, 1.00 > }
    finish { diffuse 0.8 specular 0.5 roughness 0.005 ambient 0.1 }
  }

#declare tinta_B = 
  texture {
    pigment { color rgb < 1.00, 0.80, 0.10 > }
    finish { diffuse 0.8 specular 0.5 roughness 0.005 ambient 0.1 }
  }
  
#declare preto =
  texture {
    pigment { color rgb < 0.3, 0.3, 0.3 > }
    finish { diffuse 0.8 specular 0.5 roughness 0.005 ambient 0.1 }
  }

#declare braco =   
  cylinder {
    < 0.0, 0.0, 0.0 >,
    < 6.0, 0.0, 0.0 >,
    1.0
    texture { tinta_A }
  }  

#declare cotovelo =
  sphere {
    < 7.00, 0.00, 0.00 >, 1.5
    texture { tinta_B }
  }           
    
#declare tronco = 
  cylinder {
    < 0.0, 10.0, 0.0 >,
    < 0.0, 0.0, 0.0 >,
    4.0
    texture { tinta_B }
  }  

#declare bracao =
  union {
    object { cotovelo translate <-6,0,0>}
    object { braco }
    object { cotovelo }
    union {
      object { braco }
      object { cotovelo translate <0,0,0>}
      rotate -15*z
      translate <8,0,0>
    }
    rotate -60*z
    translate <4,9,0>  
  }
  
#declare perna =
  union {
    object { cotovelo translate <-6,0,0>}
    object { braco }
    object { cotovelo }
    union {
      object { braco }
      object { cotovelo translate <0,0,0>}
      rotate -15*z
      translate <8,0,0>
    }
    rotate -60*z
    translate <2,-1,0>  
  }
        
#declare corpo =
  union {
    object { tronco }
    object { bracao }
    object { bracao scale -1*x }
    object { perna }
    object { perna scale -1*x }
  }
    
    
#declare cab =
  sphere {
    < 0.00, 0.00, 0.00 >, 3.00 
    texture { tinta_A }
  } 

#declare olho = 
  cylinder {
    < 0.90, 1.60, 0.00 >,
    < 0.90, 1.60, 2.50 >,
    0.4
    texture { tinta_B }
  }

#declare nariz =
  sphere {
    < 0.00, 0.00, 3.00 >, 0.7
    texture { tinta_B }
  }           
  
#declare cabeca =
  union {
    difference {
      object { cab }
      object { nariz }
    }
    object { olho }
    object { olho scale <-1,1,1> }
    translate <-2,13,0>
  }

#declare topo = 
  cylinder {
    < 0.00, 0.50, 0.00 >,
    < 0.00, +7.00, 0.00 >,
    2
    texture { tinta_B }
  }

#declare aba =
   cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, 1.00, 0.00 >,
    5
    texture { preto }
  }

#declare chapeu =
  union {
    object { topo }
    object { aba }
    rotate -15*z
    rotate -15*x
    translate <-1, 15 ,0>
  }     
// Aqui está a cena, finalmente:

//difference { 
//  union {
//    object { bola } 
//    object { pino }
//  }
//  object { furo }
//}

union {
  object { chapeu translate <2,1,0>}
  object { cabeca translate <2,1,0>}
  object { cotovelo translate <-7,10,0>}
  object { corpo translate <0,0,0>}
}