// Last edited on 2007-07-23 23:30:58 by stolfi
// Processed by remove-cam-lights

background{ color rgb < 0.75, 0.80, 0.85 > }

#declare raio = 2.000;

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

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

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

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

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

#declare dourado =
  texture {
    pigment { color rgb < 1.00, 0.80, 0.00 > }
    finish {  ambient 0.3
  diffuse 0.2
  specular 0.3 roughness 0.005
  reflection 0.2
    }
  }

#declare prata =
  texture {
    pigment { color rgb < 0.70, 0.70, 0.70 > }
    finish {  ambient 0.3
  diffuse 0.2
  specular 0.3 roughness 0.005
  reflection 0.2
    }
  }

#declare vermelho_rubi =
  texture {
    pigment { color rgb < 1.00, 0.00, 0.00 > filter 1.0 }
    finish {    ambient 0.3
  diffuse 0.2
  specular 0.3 roughness 0.005
  reflection 0.2
    }
  }

#declare verde_esmeralda =
  texture {
    pigment { color rgb < 0.00, 0.90, 0.00 > filter 1.0 }
    finish {    ambient 0.3
  diffuse 0.2
  specular 0.3 roughness 0.005
  reflection 0.2
    }
  }

#declare quadriculado =
  texture {
    pigment { checker color rgb < 1.00, 0.20, 0.00 >
        color rgb < 0.00, 0.00, 0.90 >
    }
  }

#declare eixoX =
  cylinder {
    < 0.00, 0.00, 0.00 >,
    < 10.00, 0.00, 0.00 >,
    0.05
    texture { vermelho }
  }

#declare eixoY =
  cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, 10.00, 0.00 >,
    0.05
    texture { verde }
  }

#declare eixoZ =
  cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, 0.00, 10.00 >,
    0.05
    texture { azul }
  }

#declare eixos_cartesianos =
  union {
    object {eixoX }
    object {eixoY }
    object {eixoZ }
}

#declare fundo =
  plane { z,0
 translate -5*z
 texture { quadriculado }
  }

#declare bola =
  sphere {
    < 0.00, 0.00, 0.00 >, 0.50
    texture { prata }
  }

#declare cilindro =
  cylinder {
    < 0.00, 0.00, 0.50 >,
    < 0.00, 0.00, -0.50 >,
    1.00
    texture { prata }
  }

#declare tronco_cabeca =
  union {
    object{ bola
 scale <1.2,1.2,1.2>
  translate <0,0,8.55 >
    }
    object{ cilindro
 scale <1,1,4>
 translate <0,0,6>
    }
  }

#declare espada =
  cone {
    <0.4, 0.0, 0.0>, 0.15
    <0.4, 0.0, 2.5>, 0.0

    texture {dourado}
  }

#declare cilindro_braco =
  object { cilindro
 scale <0.3,0.3,1.5>
 rotate 90*y
 translate 0.75*x
  }

#declare cilindro_perna =
  object { cilindro
 scale <0.4,0.4,2.0>
 translate -1.00*z
  }

#declare mao =
  object { bola
 scale <0.8,0.8,0.4>
 translate 0.4*x

  }

#macro Antebraco_dir(ang_mao)
  union {
    object {cilindro_braco}
    object {bola
 scale <0.6,0.6,0.6>
 translate 1.5*x
    }
    object {mao
     rotate ang_mao*y
 translate 1.5*x
    }
    object {espada
 rotate ang_mao*y
 translate 1.5*x

    }
  }
#end

#macro Braco_dir(ang_ant,ang_mao)
  union {
    object {cilindro_braco}
    object {bola
 scale <0.6,0.6,0.6>
 translate 1.5*x
    }
    object {Antebraco_dir(ang_mao)
     rotate ang_ant*y
 translate 1.5*x
    }
  }
#end

#macro Antebraco_esq(ang_mao)
  union {
    object {cilindro_braco}
    object {bola
 scale <0.6,0.6,0.6>
 translate 1.5*x
    }
    object {mao
     rotate ang_mao*y
 translate 1.5*x
    }
  }
#end

#macro Braco_esq(ang_ant,ang_mao)
  union {
    object {cilindro_braco}
    object {bola
 scale <0.6,0.6,0.6>
 translate 1.5*x
    }
    object {Antebraco_esq(ang_mao)
     rotate ang_ant*y
 translate 1.5*x
    }
  }
#end

#declare peh =
  object { bola
 scale <0.9,0.9,0.45>
 translate 0.45*y

  }

#macro Canela(ang_peh)
  union {
    object {cilindro_perna}
    object {bola
 scale <0.8,0.8,0.8>
 translate -2.0*z
    }
    object {peh
     rotate ang_peh*x
 translate -2.0*z
    }
  }
#end

#macro Perna(ang_can,ang_peh)
  union {
    object {cilindro_perna}
    object {bola
 scale <0.8,0.8,0.8>
 translate -2.0*z
    }
    object {Canela(ang_peh)
     rotate ang_can*x
 translate -2.0*z
    }
  }
#end

#macro Boneco( ang1_braco_dir,ang2_braco_dir,ang_ant_dir,ang_mao_dir,
  ang1_braco_esq,ang2_braco_esq,ang_ant_esq,ang_mao_esq,
  ang1_perna_dir,ang2_perna_dir,ang_can_dir,ang_peh_dir,
  ang1_perna_esq,ang2_perna_esq,ang_can_esq,ang_peh_esq
  )
  union {
    object {tronco_cabeca}

    object {bola
 scale <0.6,0.6,0.6>
 translate <1,0,7.7>
 scale <-1,0,0>
    }
    object {Braco_dir(ang_ant_dir,ang_mao_dir)
      rotate ang1_braco_dir*y
      rotate ang2_braco_dir*z
      translate <1,0,7.7>
      scale <-1,0,0>
    }

    object {bola
 scale <0.8,0.8,0.8>
 translate <0.6,0,4>
 scale <-1,0,0>
    }
    object {Perna(ang_can_dir,ang_peh_dir)
      rotate ang1_perna_dir*x
      rotate ang2_perna_dir*y
      translate <0.6,0,4>
      scale <-1,0,0>

    }

    object {bola
 scale <0.6,0.6,0.6>
 translate <1,0,7.7>
    }
    object {Braco_esq(ang_ant_esq,ang_mao_esq)
      rotate ang1_braco_esq*y
      rotate ang2_braco_esq*z
      translate <1,0,7.7>
    }

    object {bola
 scale <0.8,0.8,0.8>
 translate <0.6,0,4>
    }
    object {Perna(ang_can_esq,ang_peh_esq)
      rotate ang1_perna_esq*x
      rotate ang2_perna_esq*y
      translate <0.6,0,4>
    }

  }

#end

#macro interpola(T1, V1, T2, V2)
 ( (V1)+(clock-(T1)) *((V2)-(V1))/((T2)-(T1)))
#end

#declare ang1_braco_dir = -60+105*clock;

#declare ang_ant_dir = -90+45*clock;

#declare ang1_braco_esq = 105*clock;

#declare ang_ant_esq = -60+30*clock;

#declare ang_peh_dir = 20*sin(2*pi*clock+pi/2);

#declare ang_peh_esq = -20*sin(2*pi*clock+pi/2);

#if (clock >= 0.25 & clock <= 0.75)
 #declare ang1_perna_dir = -30*sin(2*pi*clock+pi/2);
#else
 #declare ang1_perna_dir = -15*sin(2*pi*clock+pi/2);
#end

#if (clock >= 0.25 & clock <= 0.75)
 #declare ang1_perna_esq = 15*sin(2*pi*clock+pi/2);
#else
 #declare ang1_perna_esq = 30*sin(2*pi*clock+pi/2);
#end

#if (clock < 0.5)
 #declare ang_can_dir = 20*sin(4*pi*clock+pi/2) - 35;
#else
 #declare ang_can_dir = -15;
#end

#if (clock < 0.5)
 #declare ang_can_esq = -15;
#else
 #declare ang_can_esq = 20*sin(4*pi*clock+pi/2) - 35;
#end

#declare perna_dir_z = - ( 2*cos(radians(ang1_perna_dir)) + 2*cos(radians(ang1_perna_dir+ang_can_dir)) );
#declare perna_dir_y =  ( 2*sin(radians(ang1_perna_dir)) + 2*sin(radians(ang1_perna_dir+ang_can_dir)) );

#declare perna_esq_z = - ( 2*cos(radians(ang1_perna_esq)) + 2*cos(radians(ang1_perna_esq+ang_can_esq)) );
#declare perna_esq_y =  ( 2*sin(radians(ang1_perna_esq)) + 2*sin(radians(ang1_perna_esq+ang_can_esq)) );

#declare translacao_z = -perna_dir_z;
#declare translacao_y = -perna_dir_y;

// object {fundo}

object {Boneco( 30, 60, -45, 80,
  45, 60, -30, 0,
  ang1_perna_dir, 0, ang_can_dir, ang_peh_dir,
  ang1_perna_esq, 0, ang_can_esq, ang_peh_esq
       )
 translate <0, translacao_y, translacao_z>
       }

// Original camera parameters:
// #local cam_ctr = <0.00,0.00,8.00>
// #local cam_vec = (<16.00,2.00,7.00>-<0.00,0.00,8.00>)
// #local cam_sky = z

#include "camlight.inc"
// camlight(<0.00,0.00,8.00>,<10,10,10>,20.0,z,1.0)
camlight(<0.00,0.00,6.00>,<5,10,5>,18.0,z,1.0)