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

#declare tx_fosca = 
  texture{
    pigment{ color rgb < 1,1,1 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }

#declare tx_espelho = 
  texture{
    pigment{ color rgb < 1.00, 0.85, 0.30 > }
    finish{ diffuse 0.2 reflection 0.7*< 1.00, 0.85, 0.30 > ambient 0.1 }
  }

#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 }
  }


#declare tx_xadrez =
  texture{
    pigment{ checker color rgb < 0.10, 0.32, 0.60 >, color rgb < 1.00, 0.97, 0.90 > }
    scale 2.0
  }



#include "eixos.inc"
#include "retalho.inc"


// Aqui está a cena, finalmente:

#declare p11 = <1,1,1>;
#declare p12 = <1,4,1>;
#declare p13 = <1,6,1>;
#declare p21 = <2,1,2>;
#declare p22 = <2,4,2>;
#declare p23 = <2,6,2>;
#declare p31 = <3,1,3>;
#declare p32 = <3,4,3>;
#declare p33 = <3,6,3>;
#declare p41 = <4,1,4>;
#declare p42 = <4,4,4>;
#declare p43 = <4,6,4>;
#declare o11 = <5,5,5>;
#declare o12 = <5,9,5>;
#declare o13 = <5,11,5>;
#declare o21 = <7,8,7>;
#declare o22 = <7,11,7>;
#declare o23 = <7,13,7>;
#declare o31 = <9,10,9>;
#declare o32 = <9,13,9>;
#declare o33 = <9,15,9>;
#declare o41 = <11,12,11>;
#declare o42 = <13,15,13>;
#declare o43 = <15,17,15>;

#declare p14 = (p13+o12)/2;
#declare p24 = (p23+o22)/2;
#declare p34 = (p33+o32)/2;
#declare p44 = (p43+o42)/2;
#declare o14 = (p13+o12)/2;
#declare o24 = (p23+o22)/2;
#declare o34 = (p33+o32)/2;
#declare o44 = (p43+o42)/2;

#macro interpola(f0,v0,f1,v1,f)

#local s1 = (f-f0)/(f1-f0);
#local s2 = 1-s1;
(s2*v0+s1*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);
#local v0123 = interpola(t0, v012, t3, v123, tt);

(v0123)

#end

#macro grafico(x0, y0, y1, y2, y3, x3, n)

union {

#local pond = 0;
#while(pond <= n)
#local posx = x3*(pond/n)+x0*(1-pond/n);
#local posy = interpola4(x0, y0, y1, y2, y3, x3, posx);
#local pond = 1 + pond;
object{ sphere{ posy, 0.15 texture{ tx_xadrez } } }

#end

}

#end

#macro multigrafico(x0, y1, y2, y3, y4, y5, y6, y7, y8, x1, x2, x3, x4, n)

union {

grafico(x0, (y1+y8)/2, y1, y2,(y2+y3)/2, x1, n)
grafico(x1, (y2+y3)/2, y3, y4, (y4+y5)/2, x2, n)
grafico(x2, (y4+y5)/2, y5, y6, (y6+y7)/2, x3, n)
grafico(x3, (y6+y7)/2, y7, y8, (y1+y8)/2, x0, n)

}

#end

union {
retalho(p11,p12,p13,p14,p21,p22,p23,p24,p31,p32,p33,p34,p41,p42,p43,p44, 0.01, tx_fosca, tx_xadrez)

retalho(o11,o12,o13,o14,o21,o22,o23,o24,o31,o32,o33,o34,o41,o42,o43,o44, 0.01, tx_xadrez, tx_fosca)

object{ multigrafico(2,<5,-1,3>,<3,1,8>,<8,-2,0>,<2,-3,2>,<6,0,1>,<-3,2,5>,<-1,2,4>,<0,1,-1>,3,4,5,6,50) }

 }

#include "camlight.inc"
#declare centro_cena = < 0.00, 1.00, 3.00 >;
#declare raio_cena = 20;
#declare dir_camera = <2.2, 2, 1 >;
#declare dist_camera = 50.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)