// Last edited on DATE TIME by USER
// Processed by remove-cam-lights

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

#declare tx_metal =
  texture{
    pigment{ color rgb < 0.40, 0.40, 0.40 > }
    finish{ diffuse 0.8 reflection 0.1 ambient 0.8 specular 0.5 roughness 0.005 }
  }

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

#declare tx_plastico_verde =
  texture{
    pigment{ color rgb < 0.10, 0.80, 0.10 > filter 0.70 }
    finish{ diffuse 0.8 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 }
  }

#declare tx_fosca =
  texture{
    pigment{ color rgb < 0.360, 0.360, 0.40 > }
    finish{ diffuse 0.9 reflection 0.01 specular 0.5 ambient 0.1 }
  }

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

#declare raio = 0.75;

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

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

#macro meio_sofa(k)
  #local A = array[4][4];
  #local A[0][0] = <0.0,0.0,7.5+k>;
  #local A[0][1] = <0.5,0.0,8.0+k>;
  #local A[0][2] = <2.5,0.0,8.0+k>;
  #local A[0][3] = <3.0,0.0,8.0+k>;
  #local A[1][0] = <0.0,0.0,7.0+k>;
  #local A[1][1] = <0.5,0.8+k,7.0+k>;
  #local A[1][2] = <2.5,0.8+k,7.0+k>;
  #local A[1][3] = <3.0,0.8+k,7.0+k>;
  #local A[2][0] = <0.0,0.0,6.0>;
  #local A[2][1] = <0.5,1.0+k,6.0>;
  #local A[2][2] = <2.5,1.0+k,6.0>;
  #local A[2][3] = <3.0,1.0+k,6.0>;
  #local A[3][0] = <0.0,0.0,5.0>;
  #local A[3][1] = <0.5,0.8+k,5.0>;
  #local A[3][2] = <2.5,0.8+k,5.0>;
  #local A[3][3] = <3.0,0.8+k,5.0>;

  #local B = array[4][4];
  #local B[0][0] = A[3][0];
  #local B[0][1] = A[3][1];
  #local B[0][2] = A[3][2];
  #local B[0][3] = A[3][3];
  #local B[1][0] = <0.0,3.0,4.0>;
  #local B[1][1] = <0.5,3.0,4.2+k>;
  #local B[1][2] = <2.5,3.0,4.2+k>;
  #local B[1][3] = <3.0,3.0,4.2+k>;
  #local B[2][0] = <0.0,4.8,4.0>;
  #local B[2][1] = <0.5,4.8,4.4+k>;
  #local B[2][2] = <2.5,4.8,4.4+k>;
  #local B[2][3] = <3.0,4.8,4.4+k>;
  #local B[3][0] = <0.0,4.5,4.0>;
  #local B[3][1] = <0.5,5.0+k,4.0+k>;
  #local B[3][2] = <2.5,5.0+k,4.0+k>;
  #local B[3][3] = <3.0,5.0+k,4.0+k>;

  #local C = array[4][4];
  #local C[0][0] = B[3][0];
  #local C[0][1] = B[3][1];
  #local C[0][2] = B[3][2];
  #local C[0][3] = B[3][3];
  #local C[1][0] = B[1][0];
  #local C[1][1] = <0.5,4.0,3.0>;
  #local C[1][2] = <2.5,4.0,3.0>;
  #local C[1][3] = <3.0,4.0,3.0>;
  #local C[2][0] = A[3][0];
  #local C[2][1] = <0.5,0.0,3.0>;
  #local C[2][2] = <2.5,0.0,3.0>;
  #local C[2][3] = <3.0,0.0,3.0>;
  #local C[3][0] = A[3][0];
  #local C[3][1] = <0.5,-0.5,4.0>;
  #local C[3][2] = <2.5,-0.5,4.0>;
  #local C[3][3] = <3.0,-0.5,4.0>;

  #local D = array[4][4];
  #local D[1][0] = A[1][0];
  #local D[1][1] = <0.5,-0.5,5.0>;
  #local D[1][2] = <2.5,-0.5,5.0>;
  #local D[1][3] = <3.0,-0.5,5.0>;

  #local D[0][0] = (D[1][0]+C[3][0])/2;
  #local D[0][1] = (D[1][1]+C[3][1])/2;
  #local D[0][2] = (D[1][2]+C[3][2])/2;
  #local D[0][3] = (D[1][3]+C[3][3])/2;

  #local D[2][0] = A[2][0];
  #local D[2][1] = <0.5,-0.5,8.0>;
  #local D[2][2] = <2.5,-0.5,8.0>;
  #local D[2][3] = <3.0,-0.5,8.0>;

  #local D[3][0] = (D[2][0]+A[0][0])/2;
  #local D[3][1] = (D[2][1]+A[0][1])/2;
  #local D[3][2] = (D[2][2]+A[0][2])/2;
  #local D[3][3] = (D[2][3]+A[0][3])/2;

    union{
    object{ retalho(A[0][0],A[0][1],A[0][2],A[0][3],
                    A[1][0],A[1][1],A[1][2],A[1][3],
                    A[2][0],A[2][1],A[2][2],A[2][3],
                    A[3][0],A[3][1],A[3][2],A[3][3],
                    0.0001,tx_vidro,tx_plastico_verde) }
    object{ retalho(B[0][0],B[0][1],B[0][2],B[0][3],
                    B[1][0],B[1][1],B[1][2],B[1][3],
                    B[2][0],B[2][1],B[2][2],B[2][3],
                    B[3][0],B[3][1],B[3][2],B[3][3],
                    0.0001,tx_vidro,tx_plastico_verde) }
    object{ retalho(C[0][0],C[0][1],C[0][2],C[0][3],
                    C[1][0],C[1][1],C[1][2],C[1][3],
                    C[2][0],C[2][1],C[2][2],C[2][3],
                    C[3][0],C[3][1],C[3][2],C[3][3],
                    0.0001,tx_vidro,tx_plastico_verde) }
    object{ retalho(D[0][0],D[0][1],D[0][2],D[0][3],
                    D[1][0],D[1][1],D[1][2],D[1][3],
                    D[2][0],D[2][1],D[2][2],D[2][3],
                    D[3][0],D[3][1],D[3][2],D[3][3],
                    0.0001,tx_vidro,tx_plastico_verde) }
  }
#end

#macro sofa(k)
  union{
    object{ meio_sofa(k) translate <0,0,-1> }
    object{ meio_sofa(k) scale <-1,+1,+1> translate <6,0,-1> }
    object{ roda translate < 1,0,1 > }
    object{ roda translate < 6,0,1 > }
    object{ roda translate < 3.5,4.5,0.8 > }
  }
#end

#declare roda =
  torus{
    1.5*raio, 0.5*raio texture{ tx_fosca } translate <-raio,0,0> rotate < 90,90,0 >
  }

union{
  object{ eixos(1.00) }
  object{ chao translate < 0,0,0 > texture{ tx_xadrez } }
  object{ sofa(0) }
  object{ sofa(1) translate < 10,0,0 > }
}

#include "camlight.inc"
#declare centro_cena = < 2.00, 2.00, 2.00 >;
#declare raio_cena = 10.0;
#declare dir_camera = < -15,8,2 >;
#declare dist_camera = 50.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)