// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2010-03-04 15:44:01 by stolfi

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

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

#declare tx_tronco = 
  texture{
    pigment{ color rgb < 0.65, 0.16, 0.16 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }

#declare tx_chao = 
  texture{
    pigment{ color rgb < 0.15, 0.16, 0.16 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }

#declare tx_branco = 
  texture{
    pigment{ color rgb < 0.8, 0.8, 0.8 > }
    finish{ diffuse 0.9 ambient 0.8 }
  }

#declare tx_vermelha = 
  texture{
    pigment{ color rgb < 0.89, 0.15, 0.13 > }
    finish{ diffuse 0.9 ambient 0.8 }
  }

#declare tx_xadrez =
  texture{
    pigment{ checker color rgb < 0.2, 0.3, 0.6 >, color rgb < 1, 1, 1 >}
    finish{ diffuse 0.9 ambient 0.1 }
    scale 2.0
  }
#declare tx_vidro = 
  texture{
    pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.70 }
    finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 }
  }


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

// Partes da cena:

#include "eixos.inc"

#declare chao = 
  box{ <-20,-20,-1>, <+20,+20,0> }

#macro interpola(f0, v0, f1, v1, f)
  #local ss = (f - f0) / (f1 - f0);
  #local rr = 1 - ss;
  (rr * v0 + ss * v1)
#end

#macro interpola4(t0, v0, v1, v2, v3, t1, tt)
	#local v01 = interpola(t0, v0, t1, v1, tt);
	#local v12 = interpola(t0, v1, t1, v2, tt);
	#local v23 = interpola(t0, v2, t1, v3, tt);

	#local v012 = interpola(t0, v01, t1, v12, tt);
	#local v123 = interpola(t0, v12, t1, v23, tt);

	#local vv = interpola(t0, v012, t1, v123, tt);
	vv
#end

#macro pingo(xx, xy)
	union {
		object {
			sphere {
				<xx, yy, 0>,
				0.2
			}
		}
	}
#end

#macro grafico(x0, y0, y1, y2, y3, x3, N)
	union {
		#local i = 0;
		#local p = (x3 - x0) / N;
		#while(i < N)
			#local xx = x0 + (p * i);
			#local yy = interpola4(x0, y0, y1, y2, y3, x3, xx);
			pingo(xx, yy)
			#local i = i + 1;
		#end
	}
#end

#macro supergrafico()
	union {
		#local x0 = 0;
		#local x1 = 10;
		#local x2 = 20;
		#local x3 = 30;
		#local x4 = 40;
		#local y0 = 14;
		#local y1 = 6;
		#local y2 = 1;
		#local y3 = 4;
		#local y4 = 9;
		#local y5 = 5;
		#local y6 = 3;
		#local y7 = 8;
		#local y8 = 12;
		#local y9 = 4;
		#local b1 = (y2+y3)/2;
		#local b2 = (y4+y5)/2;
		#local b3 = (y6+y7)/2;

		grafico(x0, y0, y1, y2, b1, x1, 8)
		grafico(x1, b1, y3, y4, b2, x2, 8)
		grafico(x2, b2, y5, y6, b3, x3, 8)
		grafico(x3, b3, y7, y8, y9, x4, 8)
	}
#end

union{
	//object { eixos(10.0) }
	//grafico(0, 5, 1, 15, 8, 10, 10)
	supergrafico() translate<-14, 0, 0>
}

#include "camlight.inc"
#declare centro_cena = < 0.00, 1.00, 0.00 >;
#declare raio_cena = 40.0;
#declare dir_camera = < 0.00, 1.0, 10.00 >;
#declare dist_camera = 40.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)