// ======================================================================
// CORES E TEXTURAS

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

#declare tx_vidro = 
  texture{
    pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.40 }
    finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 }
  }

#declare tx_xadrez =
  texture{
    pigment{ checker color rgb < 0.90, 0.12, 0.20 >, color rgb < 1.00, 0.97, 0.90 > }
    finish{ diffuse 0.9 ambient 0.1 }
    scale 2.0
  }

#declare tx_outra =
  texture{
    pigment{ checker color rgb < 0.20, 0.82, 0.40 > }
    finish{ diffuse 0.9 ambient 0.1 }
    scale 2.0
  }

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

// Partes da cena: 
  
#declare pinicial = 
  sphere{
		< 0,0,0 >, 0.3
	}
 
#macro inter(t0,v0,t1,v1,f)
	#local aa = (f-t0)/(t1-t0);
	#local bb = 1-aa;
	
	(bb*v0 + aa*v1)
#end

#macro inter4(t0, v0, v1, v2, v3, t1, tt)
	#local va = inter(t0, v0, t1, v1, tt);
	#local vb = inter(t0, v1, t1, v2, tt);
	#local vc = inter(t0, v2, t1, v3, tt);
	#local vd = inter(t0, va, t1, vb, tt);
	#local ve = inter(t0, vb, t1, vc, tt);
	#local vf = inter(t0, vd, t1, ve, tt);
	vf
#end

#macro desloca(xa, ya)
	object { pinicial translate <xa, ya, 0>}
#end

#macro grafico(x0, y0, y1, y2, y3, x3, n)
	#local soma = (x3-x0)/n;
	#local i = 0;
	
	union {
		
		#while(i < n)
			#local xs = i*soma+x0;
			#local ys = inter4(x0, y0, y1, y2, y3, x3, xs);
			desloca(xs, ys)

			#local i=i+1;
		#end
	
	}
	
#end

#include "eixos.inc"

// CENA

union{
  object { eixos(20.00) }

  #local y0a = 4;
  #local y0b = 5;
  #local y0c = 1;

  #local y1b = 4;
  #local y1c = 7;

  #local y2b = 3;
  #local y2c = 1;

  #local y3b = 4;
  #local y3c = 5;
  #local y3d = 6;

  #local y0d = (y0c + y1b)/2;
  #local y1d = (y1c + y2b)/2;
  #local y2d = (y2c + y3b)/2;
  
  #local y1a = y0d;
  #local y2a = y1d;
  #local y3a = y2d;

  object {grafico(1,y0a,y0b,y0c,y0d,5,10) texture{ tx_xadrez} }
  object {grafico(5,y1a,y1b,y1c,y1d,8,10) texture{ tx_outra} }
  object {grafico(8,y2a,y2b,y2c,y2d,14,10) texture{ tx_xadrez} }
  object {grafico(14,y3a,y3b,y3c,y3d,20,10) texture{ tx_outra} }
 
}

#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 1.00 >;
#declare raio_cena = 25;
#declare dir_camera = < 0.00, 0.01, 4.00 >;
#declare dist_camera = 50.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , y, intens_luz)