// TP02 - 14/08/03
// Last edited on 2003-10-14 23:27:10 by stolfi
#include "colors.inc"

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

#declare ctr = <  0.00, 7.00, 0.00 >;
#declare camdir = <  10.00, 10.00, 25.00 >;

camera {
  location  ctr + 0.60*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 * < +50.0, +30.0, +30.0 >              // Posição da lâmpada.
  color rgb 1.2 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

light_source {
  10 * < -10.0, +15.0, +50.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 tinta_cinza = 
  texture {
    pigment { Gray75 }
    finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 }
  }

#declare tinta_vermelha = 
  texture {
    pigment { color rgb < 1.00, 0.00, 0.00 > }
    finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 }
  }
  
#declare olho =
  cylinder {
    < 0.00, 0.00, 0.00>,
    < 0.00, 0.20, 0.00>,
    0.2
    rotate -90*x
    texture { tinta_vermelha }
  }
  
#declare boca =
  difference {
    cylinder {
      < 0.00, 0.00, 0.00>,
      < 0.00, 0.20, 0.00>,
      0.3
    }
    cylinder {
      < 0.00, 1.00, 0.00>,
      < 0.00, -1.00, 0.00>,
      0.2
    }
    texture { tinta_vermelha }
    scale <1.5,1,1>
    rotate -90*x
  }

#declare cabeca = 
union{
  cylinder {
    < 0.00, 10.00, 0.00 >,
    < 0.00, 12.50, 0.00 >,
    1.5
    texture { tinta_cinza }
  }
  object {olho translate < 1.20, 12.10, 1.30> rotate 20*y}
  object {olho translate < 1.20, 12.10, 1.30> rotate -20*y}
  object {boca translate < 1.20, 10.80, 1.30>}
}

#declare pescoco =
  cylinder {
    < 0.00, 10.00, 0.00 >,
    < 0.00, 9.00, 0.00 >,
    0.3
    texture { tinta_cinza }
  }

#declare braco1 =
union{
  cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, 3.00, 0.00 >,
    0.4
    rotate -90*x
  }
  cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, 2.50, 0.00 >,
    0.4
    rotate 90*x
    rotate 45*y
    rotate -30*z
  }
  texture { tinta_cinza }
}

#declare braco2 =
union{
  cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, 3.00, 0.00 >,
    0.4
    rotate -90*x
  }
  cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, 2.50, 0.00 >,
    0.4
    rotate 90*x
    rotate -45*y
    rotate -30*z
  }
  texture { tinta_cinza }
}

#declare perna =
  cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, 5.00, 0.00 >,
    0.5
    texture { tinta_cinza }
  }

#declare corpo = 
union{
  object {pescoco}
  cylinder {
    < 0.00, 9.00, 0.00 >,
    < 0.00, 6.00, 0.00 >,
    1.5
    texture { tinta_cinza }
  }
  object {braco1 translate< -1.50, 8.00, 2.50>}
  object {braco2 translate< 1.50, 8.00, 2.50>}
  object {perna translate< 0.80, 1.00, 0.00>}
  object {perna translate< -0.80, 1.00, 0.00>}
}
 
#declare gomo_saia =
  box {
    < -0.50, 0.00, 0.30 >,
    < 0.50, 2.50, -.30>
    rotate -30*x
    texture { tinta_vermelha }
  }

#declare saia = 
union{
  object {gomo_saia rotate -15*y translate< -1.0, 4.00, 1.70>}
  object {gomo_saia rotate 20*y translate< 0.90 , 4.00, 1.70>}
  object {gomo_saia rotate 80*y translate< 2.0, 4.00, 0.00>}
}
  
// Aqui está a cena:
union {
  object { cabeca } 
  object { corpo }
  object {saia}
  rotate -10*y
}