// Last edited on 2003-12-07 14:22:52 by stolfi
// Exemplo de arquivo de descricao de cena para POV-ray

// ======================================================================
#include "colors.inc"

#declare ctr = < 2.50, 3.00, 1.50 >;
#declare camDir = (< -20.00, -16.00, 10 >) - (< 2.00, 0.00, 1.50 >);

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

// ======================================================================
// 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.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 fonte = seed(92488);

#declare chao = plane {
  z,0
  pigment {Green}
}

#declare pe_da_cama = cylinder {
  <0,0,1>
  <0,0,-1>
  0.3
  pigment { Brown }
}

#declare cama = union {
  box {
    <0,0,0>
    <5,6,1>
    pigment { White }
  }
  object { pe_da_cama translate <0,0,0> }
  object { pe_da_cama translate <5,0,0> }
  object { pe_da_cama translate <0,6,0> }
  object { pe_da_cama translate <5,6,0> }
}

#declare corpo = difference {
  sphere {
    <0,0,0>
    2
  }
  box {
    <-2,-2,0>
    <2,2,2>
  }
  pigment { Red }
}

#declare cabeca = sphere {
  <0,0,0>
  0.8
}

#declare pata4 = cone {
  <0,0,0>, 0.1
  <1,0,0>, 0
}

// Aqui está a cena, finalmente:

union{

  #declare i = 0;
  object { cama }
  object { corpo translate <2.5,3,3> }
  object { cabeca translate <2.5,0.5,3> }
  #while(i < 7)
    #declare alfa = -90*rand(fonte);
    #declare beta = -90*rand(fonte);
    #declare gama = -90*rand(fonte);
    #declare delta = -90*rand(fonte);

    #declare pata3 = union {
      cylinder {
        <0,0,0>
        <1,0,0>
        0.1
      }
      object {
        pata4
        rotate delta*y
        translate <1,0,0>
      }
    }

    #declare pata2 = union {
      cylinder {
        <0,0,0>
        <1,0,0>
        0.1
      }
      object {
        pata3
        rotate gama*y
        translate <1,0,0>
      }
    }

    #declare pata = union {
      cylinder {
        <0,0,0>
        <1,0,0>
        0.1
      }
      object {
        pata2
        rotate beta*y
        translate <1,0,0>
      }
    }

   object {
      pata
      rotate alfa*y
      translate <2.5,3,3> + 2*<cos(-pi/6 + i*2*pi/9),sin(-pi/6 + i*2*pi/9),0>      
    }
    #declare i = i+1;
    #if (i = 3)
      #declare i = i+1;
    #end
  #end

}