//Aluno: Lucas Moreira Vidigal Infante
//RA: 073371

background{ color rgb < 1.00, 1.00, 1.00 > }


#declare p11 = <0,3,0>;
#declare p12 = <0,4,0>;
#declare p13 = <0,5,0>;
#declare p14 = <0,7,0>;
#declare p21 = <1,3,4>;
#declare p22 = <1,4,4>;
#declare p23 = <1,5,4>;
#declare p24 = <1,7,4>;
#declare p31 = <3,3,0>;
#declare p32 = <3,4,0>;
#declare p33 = <3,5,0>;
#declare p34 = <3,7,2>;

#declare q21 = <6,3,4>;
#declare q22 = <6,4,4>;
#declare q23 = <6,5,4>;
#declare q24 = <6,7,4>;
#declare q31 = <8,3,0>;
#declare q32 = <8,4,0>;
#declare q33 = <8,5,0>;
#declare q34 = <8,7,2>;
#declare q41 = <10,3,2>;
#declare q42 = <10,4,2>;
#declare q43 = <10,5,2>;
#declare q44 = <10,7,2>;


#declare p41 = (p31 + q21)/2;
#declare p42 = (p32 + q22)/2;
#declare p43 = (p33 + q23)/2;
#declare p44 = (p34 + q24)/2;


#declare q11 = p41;
#declare q12 = p42;
#declare q13 = p43;
#declare q14 = p44;


#declare tx_plastico = 
  texture{
    pigment{ color rgb < 0.50, 0.50, 0.50 > }
    finish{ diffuse 0.5 ambient 0.2 specular 0.3 roughness 0.005 }
  }

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

#macro medio(ponto1, ponto2)

    (ponto1 + ponto2)/2    
    
#end

#declare ponto = sphere{
    	< 0.00, 0.00, 0.00 >, 0.3
  }

#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);
   #local v0123 = interpola(t0,v012,t3,v123,tt);
   v0123
#end

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

#end

#include "eixos.inc"
#include "retalho.inc"
union{
	 //object {eixos(3)}
	 object{ grafico(p11,medio(p22,p12),p12,p13,medio(p13,p21),p14,20) pigment{ color rgb < 0.00, 0.00, 1.00 >}} 
	 object{ grafico(p14,medio(p13,p21),p21,p22,medio(p22,p24),p23,20) pigment{ color rgb < 0.00, 1.00, 0.00 >}}
	 object{ grafico(p23,medio(p22,p24),p24,p31,medio(p31,p33),p32,20) pigment{ color rgb < 1.00, 0.00, 0.00 >}}
	 object{ grafico(p32,medio(p31,p33),p33,p34,medio(p34,p12),q21,20) pigment{ color rgb < 1.00, 0.00, 1.00 >}}
	 
	 object { retalho(p11,p12,p13,p14,p21,p22,p23,p24,p31,p32,p33,p34,p41,p42,p43,p44, 0.000001, tx_plastico, tx_fosca ) translate <0,7,0>}
	 object { retalho(q11,q12,q13,q14,q21,q22,q23,q24,q31,q32,q33,q34,q41,q42,q43,q44, 0.000001, tx_fosca, tx_plastico ) translate <0,7,0>}
}


#include "camlight.inc"
#declare centro_cena = < 0.00, 5.00 , 0.00 >;
#declare raio_cena = 20;
#declare dir_camera = <5,2,2>;
#declare dist_camera = 30;
#declare intens_luz = 0.80;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)