// Last edited on 2003-12-07 18:47:08 by stolfi
// Exemplo de arquivo de descricao de cena para POV-ray

// ======================================================================


#include "colors.inc"
#include "metals.inc"
#include "golds.inc"
#include "stones1.inc"
#include "textures.inc"



background{ color rgb < 0.8,0.9,1.5 > }


//definicao da camera
#declare ctr = < 0.00, 0.00, 0.00 >;
#declare camDir = < 2.0, 3.00, 10.00 >;

camera {
  location   ctr + 0.75*camDir
  right      -1.00*x
  up         0.75*y
  sky        y
  look_at    ctr
}
 


// ======================================================================
// FONTES DE LUZ


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

light_source {
   < 10.0, 4.0, 1.0 >              // Posição da lâmpada.
  color rgb 2.5 * < 1.00, 1.00, 1.00 >      // Intensidade e corda luz.
} 

#declare cabeca1 =
   sphere {
     <0,0,0>, 0.7
     pigment {color Bronze}
}

#declare corte1 =
   cylinder {
     <.4,0,0>, <3,0,0>, 0.7
      pigment {color Bronze}
}

#declare antena1 =
    torus {
  0.3,
  0.1
  pigment {color RichBlue}
  rotate -90*z
}

#declare corte_antena2 =
    box{
   <1, 1, 1>,
  <-1,-1,0>
  pigment {color RichBlue}
}    

#declare corte_antena1 =
    box{
   <-1, -1, -1>,
  <1,1,0>
  pigment {color RichBlue}
}    

#declare sensor =
   sphere {
  <0,0,0>,
  0.15
  pigment {color SeaGreen}
}

#declare antena_esq =
   union {
     difference {
  object {antena1}
  object {corte_antena1}
     }
   object {sensor translate <0,0.3,0>}
}

#declare antena_dir =
  union {
    difference {
  object {antena1}
  object {corte_antena2}
    }
  object {sensor translate <0,0.3,0>}  
}

#declare cabeca =
  union {
    difference {
  object {cabeca1}
  object {corte1}  
    }
    object {antena_esq translate 0.7*y translate -0.4*z}
    object {antena_dir translate 0.7*y translate 0.4*z}
  }

#declare parte1 =
   cylinder {
  <0,0,0>, 
  <.5,0,0>,
  0.1
  pigment {color Bronze}
}

#declare parte2 =
   cylinder {
  <0,0,0>, 
  <.5,0,0>,
  0.1
  pigment {color Bronze}
}
#declare juncao1 =
   sphere {
  <0,0,0>,
  0.15
  pigment {color Bronze}
}

#declare partes =
   union {
  object {parte1}
  object {juncao1}
}


// Aqui está a cena, finalmente:

#declare fonte = seed(3567759);

#declare anguloAlfa = -90*rand(fonte);
#declare anguloBeta = 90*rand(fonte);
#declare anguloGama = -90*rand(fonte);
#declare anguloSigma = -90*rand(fonte);

#declare i = 1;

#while (i <= 1)  
  #declare aux1 = 1*rand(fonte);
  #declare aux2 = 1*rand(fonte);

  #if (aux1 <= 0 & aux2 <= 0)
     #declare anguloAlfa = 90*rand(fonte);
     #declare anguloBeta = 90*rand(fonte);
     #declare anguloGama = -90*rand(fonte);
     #declare anguloSigma = -90*rand(fonte);
  #else
  #if (aux1 <= 0)
      #declare anguloAlfa = 90*rand(fonte);
     #declare anguloBeta = -90*rand(fonte);
      #declare anguloGama = -90*rand(fonte);
     #declare anguloSigma = 90*rand(fonte);
  #else
  #if (aux2 <= 0)
      #declare anguloAlfa = -90*rand(fonte);
     #declare anguloBeta = 90*rand(fonte);
      #declare anguloGama = 90*rand(fonte);
     #declare anguloSigma = -90*rand(fonte);
  #end  
  #end  
  #end
  
    #declare parte2 =
      union {
             cylinder {
       <0,0,0>, 
       <.5,0,0>,
       0.1
       pigment {color Bronze}
         }
     sphere {
       <0,0,0>,
       0.15
       pigment {color Bronze}
    }
  }
    

    #declare parte1 =
    union {
     cylinder {
        <0,0,0>, 
        <0.5,0,0>,
        0.1
        pigment {color Bronze}
            }
       sphere {
       <0,0,0>,
       0.15
       pigment {color Bronze}
      }
    
                object {parte2 rotate anguloBeta*z translate <0.5,0,0>}
      }
   
  object {parte1 rotate anguloAlfa*z translate <0,0,0>}

  #declare i = i + 1;
#end