// 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_plastico = 
  texture{
    pigment{ color rgb < 0.10, 0.80, 1.00 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
  }


// ======================================================================
// DESCRIÇÃO DA CENA 

#declare raio = 1.000;
#include "eixos.inc"

// Aqui está a cena, finalmente:


#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,t3,tt)
#local v01 = interpola(t0,v0,t3,v1,tt);
#local v12 = interpola(t0,v1,t3,v2,tt);
#local v23 = interpola(t0,v2,t3,v3,tt);

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

interpola(t0,v012,t3,v123,tt);
#end

#macro grafico(x0,y0,y1,y2,y3,x3,N)
 #local delta = (x3-x0)/N;
 #local i = 0;
 #local xx = x0;
 #while(i <= N)
   #local yy = interpola4(x0,y0,y1,y2,y3,x3,xx);
   object{ sphere { <0.00, xx, yy>, 0.10 } texture { tx_plastico }}
   #local xx = xx + delta;
   #local i = i + 1;
 #end
#end

#macro grafico4(x0,y0,y1,y2,h1,h2,u1,u2,p1,p2, p3,x1,n)
   #local h0 = (h1+y2)/2;
   #local y3=h0;
   #local u0 = (u1+h2)/2;
   #local h3=u0;
   #local p0 = (p1+u2)/2;
   #local u3=p0;

   #local k = (x1-x0)/4;

	grafico(x0,y0,y1,y2,y3,x0+k,n)
	grafico(x0+k,h0,h1,h2,h3,x0+k*2,n)	
	grafico(x0+k*2,u0,u1,u2,u3,x0+k*3,n)
	grafico(x0+k*3,p0,p1,p2,p3,x0+k*4,n)

#end

union {
object{ eixos(3.00) }
grafico4(0,2,3,5,1,4,2,6,3,2,1,6,100)
}


#include "camlight.inc"
#declare centro_cena = < 1.00, 1.00, 1.00 >;
#declare raio_cena = 10.0;
#declare dir_camera = < 1.00, -1.00, 0.50 >;
#declare dist_camera = 80.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)