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

#declare tx_fosca = 
  texture{
    pigment{ color rgb < 1.00, 0.80, 0.10 > }
    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.90 }
    finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 }
  }

#declare tx_head = 
  texture{
    pigment{ color rgb < 0.90, 0.15, 0.10 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
  }

#declare tx_red = 
  texture{
    pigment{ color rgb < 1, 0, 0 > filter 0.70 }
    finish{ diffuse 0.8 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 }
  }
#declare tx_blue =
  texture{
    pigment{ color rgb < 0.30, 0.5, 0.90 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
  }

#declare tx_brown =
  texture{
    pigment{ color rgb < 0.55, 0.15, 0.45 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
  }

#declare tx_yellow =
  texture{
    pigment{ color rgb < 1, 1, 0 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
  }

#declare tx_green =
  texture{
    pigment{ color rgb < 0.30, 0.9, 0.20 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 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 > }
    finish{ diffuse 0.9 ambient 0.1 }
    scale 2.0
  }

#macro interpola(f0,v0,f1,v1,ff)
       #local ss = (ff-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 v0123 = interpola(t0,v012,t1,v123,tt);
       (v0123       )
#end

//#declare vv = interpola4(t0,v0,v1,v2,v3,t1,tt);
#declare raio = 0.2;
#declare ponto = sphere {
	 <0,0,0>,
	raio
	texture {tx_head}
}

#macro grafico(x0,y0,y1,y2,y3,x3,N)
union {
#local i=x0;
#while (i<x3)
       #local yy  = interpola4(x0,y0,y1,y2,y3,x3,i);
       	      //object{ponto translate<i,yy,0>}
	      object{ponto translate yy}
       #local i = i + (x3-x0)/N;
#end
}       
#end

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

// Aqui está a cena, finalmente:
#include "eixos.inc"
#include "retalho.inc"

#declare x0 =1;
#declare x3 = 7;
#declare y0 = 1;
#declare y1 = 2;
#declare y2 = 10;

#declare y1_ = 3;
#declare y2_ = 7;
#declare y3_ = 1;
#declare x0_ = x3;
#declare x3_ = 15;

#declare y0_= (y2 + y1_)/2;
#declare y3 = y0_;


#declare y1__ = 5;
#declare y2__ = -4;
//#declare y3__ = 0;

#declare x0__ = x3_;
#declare x3__ = 20;

#declare y0__ = (y2_ + y1__)/2;
#declare y3_ = y0__;

//grafico 4

#declare y1___ = -10;
#declare y2___ = 2;
#declare y3___ = 7;

#declare x0___ = x3__;
#declare x3___ = 25;

#declare y0___ = (y2__ + y1___)/2;
#declare y3__ = y0___;

//pontos A
#declare x0A = 0;
#declare x3A = 5;

//#declare p0A = <1,12,3>;
#declare p1A = <3,-7,1>;
#declare p2A = <-5,7,1>;

//pontos B
#declare x3B = 10;

#declare p1B = <7,3,1>;
#declare p2B = <-5,-3,0>;

//pontos C
#declare x3C = 15;

#declare p1C = <-9,3,4>;
#declare p2C = <-1,7,8>;

//pontos D
#declare x3D = 20;

#declare p1D = <9,9,1>;
#declare p2D = <-5,-3,1>;
 

//conexoes

#declare x0B = x3A;
#declare x0C = x3B;
#declare x0D = x3C;

#declare p3A = (p2A + p1B)/2;
#declare p0B = p3A; 

#declare p3B = (p2B + p1C)/2;
#declare p0C = p3B; 

#declare p3C = (p2C + p1D)/2;
#declare p0D = p3C;

#declare p0A = (p2D + p1A)/2;
#declare p3D = p0A; 



//retalho
  #declare p11 = <0,0,0>;
  #declare p12 = <0,3,0>;
  #declare p13 = <0,5,0>;
  #declare p14 = <0,7,0>;	
  #declare p21 = <3,1,3>;	
  #declare p22 = <3,2,3>;	
  #declare p23 = <3,4,3>;	
  #declare p24 = <3,6,3>;	
  #declare p31 = <5,1,-1>;	
  #declare p32 = <5,2,-1>;	
  #declare p33 = <5,4,-1>;	
  #declare p34 = <5,6,-1>;	
  
//#declare p41 = <5,0,1>;	
//  #declare p42 = <5,3,1>;	
//  #declare p43 = <5,5,1>;	
//  #declare p44 = <5,7,1>;	

  #declare x21 = <9,0,2>;	
  #declare x22 = <9,3,2>;	
  #declare x23 = <9,5,2>;	
  #declare x24 = <9,7,2>;	
  #declare x31 = <13,-1,4>;	
  #declare x32 = <13,2,4>;	
  #declare x33 = <13,6,4>;	
  #declare x34 = <13,9,4>;	
  #declare x41 = <15,0,1>;	
  #declare x42 = <15,3,1>;	
  #declare x43 = <15,5,1>;	
  #declare x44 = <15,7,1>;	

  #declare p41 = (x21 + p31)/2;
  #declare p42 = (x22 + p32)/2;
  #declare p43 = (x23 + p33)/2;
  #declare p44 = (x24 + p34)/2;

  #declare x11 = p41;
  #declare x12 = p42;
  #declare x13 = p43;
  #declare x14 = p44;
  

  #declare raio_barras = 0.0001;
  #declare textura_grid = tx_blue;
  #declare textura_retalho = tx_red;


union{
  object{ eixos(3.00) }

//  object {texto1 translate<0,0,0>}
  //object{ chao  translate < 5,10,-5 > texture{ tx_xadrez } }
  union {

  object {grafico(x0A,p0A,p1A,p2A,p3A,x3A,15)}
  object {grafico(x0B,p0B,p1B,p2B,p3B,x3B,15)}
  object {grafico(x0C,p0C,p1C,p2C,p3C,x3C,15)}
  object {grafico(x0D,p0D,p1D,p2D,p3D,x3D,15)}
  

  
  translate<-5,0,2>
  }
  union {
    object {retalho(
	p11,p12,p13,p14,
	p21,p22,p23,p24,
	p31,p32,p33,p34,
	p41,p42,p43,p44,
	raio_barras,
	textura_grid,
	textura_retalho,	)}
    object {retalho(
	x11,x12,x13,x14,
	x21,x22,x23,x24,
	x31,x32,x33,x34,
	x41,x42,x43,x44,
	raio_barras,
	textura_grid,
	textura_retalho,	)}
	
  }
}

#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 0.00 >;
#declare raio_cena = 20.0;
#declare dir_camera = < 14,7 , 10 >;
#declare dist_camera = 45.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)