// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2003-09-04 15:25:26 by stolfi

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

camera {
  location  <  40, -40, 10 >  // Posição do observador.
  right     -1.3333*x                // Largura RELATIVA da imagem.
  up        1.00*y                 // Altura RELATIVA da imagem.      
  sky       z                      // Qual direção é "para cima"?
  look_at   <  15, -15, 0 >  // 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, +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 peaum =
  merge {
    cylinder { <0.5, -0.5, 0.1>, <0.5, -0.5, 0.2>, 0.4 }
    cone { <0.5, -0.5, 0.2>, 0.25, <0.5, -0.5, 1.2>, 0.05 }
    sphere { <0.5, -0.5, 1.4>, 0.2 }
  }

#declare rei =
  merge {
    cylinder { <0.5, -0.5, 0.1>, <0.5, -0.5, 0.2>, 0.4 }
    cone { <0.5, -0.5, 0.2>, 0.25, <0.5, -0.5, 1.2>, 0.05 }
    box { <0.45, -0.45, 1.2>, <0.55, -0.55, 1.6> }
    box { <0.30, -0.45, 1.35>, <0.70, -0.55, 1.45> }
  }

#declare torre =
  merge {
    cylinder { <0.5, -0.5, 0.1>, <0.5, -0.5, 0.2>, 0.4 }
    cone { <0.5, -0.5, 0.2>, 0.25, <0.5, -0.5, 1.2>, 0.05 }
    difference {
      cylinder { <0.5, -0.5, 1.2>, <0.5, -0.5, 1.4>, 0.2 }
      cylinder { <0.5, -0.5, 1.25>, <0.5, -0.5, 1.5>, 0.15 }
    }
  }

// Aqui está a cena, finalmente:

plane {
  z, 0
  pigment {
    color rgb <1, 1, 0>
  }
} 

#declare roleta = seed(4675);
#declare peoes = 0;
#declare torres = 0;
#declare pecas = 0;
#declare aleatorio = 0;
#declare aleatorio2 = 0;

// Tabuleiro

#declare i=0;
#declare j=0;
#declare k=1;
#while (i<30)
  #while (j<30)
    box {
      <j, -i, 0>, <j+1, -(i+1), 0.1>
    #if (mod(k,2) = 0)
      pigment { color rgb <1, 1, 1> }
    #else pigment {color rgb <0, 0, 0> }
    #end
    #declare k = k + 1;
    }
    #declare j = j + 1;
    #end
  #declare j=0;
  #declare i = i + 1;
  #declare k = k + 1;
#end

// Peças

#declare posicaox = int(30*rand(roleta));
#declare posicaoy = int(30*rand(roleta));
object { rei pigment { color rgb <0, 1, 0> } translate <posicaox, -posicaoy, 0> }

#declare posicaox = int(30*rand(roleta));
#declare posicaoy = int(30*rand(roleta));
object { rei pigment { color rgb <0, 0, 1> } translate <posicaox, -posicaoy, 0> }

#while (pecas < 98)
  #declare aleatorio = int(2*rand(roleta)+1);
  #declare aleatorio2 = int(2*rand(roleta)+1);
  #declare posicaox = int(30*rand(roleta));
  #declare posicaoy = int(30*rand(roleta));
  #if (aleatorio = 1)
    #declare cor = color rgb <0, 1, 0>;
  #else #declare cor = color rgb <0, 0, 1>;
  #end
  #if (aleatorio2 = 1)
    object { peaum pigment { cor } translate <posicaox, -posicaoy, 0> }
  #else
    object { torre pigment { cor } translate <posicaox, -posicaoy, 0> }
  #end
  #declare pecas = pecas + 1;
#end