// Laboratorio 3 - Andreia Silva Donalisio - ra026898
// HIPERXADRES =)

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

camera {
  location  <  0.00, 0.00, 6.00 >   // Posi�o do observador.
  right     2.00*x                  // Largura RELATIVA da imagem.
  up        2.00*y                  // Altura RELATIVA da imagem.      
  sky       z                       // Qual dire�o �"para cima"?
  look_at   <  10.00, 10.00, 0.00 > // Para onde a c�era est�apontando.
} 
// Nota: os parametros "right" e "up" devem ter a mesma proporcao
// que os parametros ${WIDTH} e ${HEIGHT} no Makefile.

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

light_source {
  10 * < +50.0, +30.0, +50.0 >           // Posicao da lampada.
  color rgb 1.2 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

light_source {
  10 * < +50.0, -10.0, +10.0 >           // Posicao da lampada.
  color rgb 0.8 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

// ======================================================================
// DESCRICAO DA CENA 

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

#declare raio = 2.000;

#declare tinta_azul = 
  texture {
    pigment { color rgb < 0.10, 0.80, 1.00 > }
    finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 }
  }

#declare tinta_amarelo = 
  texture {
    pigment { color rgb < 1.00, 0.80, 0.10 > }
    finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 }
  }

#declare tinta_vermelho = 
  texture {
    pigment { color rgb < 1.00, 0.00, 0.00 > }
    finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 }
  }
  
#declare tinta_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 tinta_branco = 
  texture {
    pigment { color rgb < 1.00, 1.00, 1.00 > }
    finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 }
  }
 

#declare peao =
  union {
	cone {
	<0.00, 0.00, 0.00>, 0.25
	<0.00, 0.00, 1.00>, 0
	}
	sphere {
	< 0.00, 0.00, 1.00 >, 0.15 
	}
  }
 
 
#declare torre = 
	cylinder {
	< 0.00, 0.00, 0.00 >,
	< 0.00, 0.00, 1.50 >,
	0.25
	}

#declare rei = 
union {
	cylinder {
	< 0.00, 0.00, 0.00 >,
	< 0.00, 0.00, 1.75 >,
	0.25
	}
	cylinder {
	< 0.00, 0.00, 1.75 >,
	< 0.00, 0.00, 2.30 >
	0.10
	}
	cylinder {
	< 0.325, 0.00, 2.075 >,
	< 0.00, 0.325, 2.075 >
	0.10
	}
  }

#declare tabuleiro = 
	box {
	< 1.00, 0.00, 0.00 >,
	< 0.00, 1.00, 0.02 >
  }


//cenario:

//criacao do tabuleiro
#declare i = 0;
#declare j = 0;
#while (i < 30)
	#while (j < 30)
		object {
			tabuleiro
			translate <i, j, 0>
			#if (mod(i+j, 2) = 0)
				texture {tinta_preto}
			#else
				texture {tinta_branco}
			#end
		}		
		#declare j = j + 1;
	#end
	#declare i = i + 1;
	#declare j = 0;
#end

//colocacao das pecas

#declare i = 0;
#declare j = 0;
#declare roleta = seed (12345);
#while (i < 30)
	#while (j < 30)
		#declare va = 1000*rand(roleta);
		#if (va < 100)
			object {
				peao
				translate <i + 0.5, j + 0.5, 0.02>
				#if (mod (i,2) = 0)
					texture {tinta_azul}
				#else
					texture {tinta_vermelho}
				#end
			}
		#else
			#if (va < 200)
				object {
					torre
					translate <i + 0.5, j + 0.5, 0.02>
					#if (mod(i,2) = 0)
						texture {tinta_azul}
					#else
						texture {tinta_vermelho}
					#end
				}
			#else 
				#if (va < 215) //menos chances de aparecer um rei
					object {
					rei
					translate <i + 0.5, j + 0.5, 0.02>
					#if (mod (i,2) = 0)
						texture {tinta_azul}
					#else
						texture {tinta_vermelho}
					#end
					}
				#end
			#end
		#end
				
		#declare j = j + 1;
	#end
	#declare i = i + 1;
	#declare j = 0;
#end