// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2023-12-28 16:14:34 by stolfi

// Raio da grade debug:
// #declare rdb = 0.025;
#declare rdb = 0;

#declare s = seed(1);

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

#include "retalho.inc"
#declare p = array[4][4]

#declare p[0][0] = <0,0,1>;
#declare p[0][1] = <0,1,1>;
#declare p[0][2] = <0,2,1>;
#declare p[0][3] = <0,3,1>;
#declare p[1][0] = <1,0,2>;
#declare p[1][1] = <1,1,2>;
#declare p[1][2] = <1,2,2>;
#declare p[1][3] = <1,3,2>;
#declare p[2][0] = <2,0,0>;
#declare p[2][1] = <2,1,0>;
#declare p[2][2] = <2,2,0>;
#declare p[2][3] = <2,3,0>;

#declare q = array[4][4];

#declare q[1][0] = <3,0,4>;
#declare q[1][1] = <3,1,4>;
#declare q[1][2] = <3,2,4>;
#declare q[1][3] = <3,3,4>;
#declare q[2][0] = <5,0,2>;
#declare q[2][1] = <5,1,2>;
#declare q[2][2] = <5,2,2>;
#declare q[2][3] = <5,3,2>;
#declare q[3][0] = <6,0,6>;
#declare q[3][1] = <6,1,6>;
#declare q[3][2] = <6,2,6>;
#declare q[3][3] = <6,3,6>;

#declare r = array[4][4];

#declare r[0][0] = <4,4,4>;
#declare r[0][1] = <5,4,4>;
#declare r[0][2] = <6,4,4>;
#declare r[0][3] = <7,4,4>;

#declare r[1][0] = <4,5,5>;
#declare r[1][1] = <5,5,5>;
#declare r[1][2] = <6,5,5>;
#declare r[1][3] = <7,5,5>;

#declare r[2][0] = <4,6,4>;
#declare r[2][1] = <5,6,4>;
#declare r[2][2] = <6,6,4>;
#declare r[2][3] = <7,6,4>;

#declare r[3][0] = <4,7,5>;
#declare r[3][1] = <5,7,5>;
#declare r[3][2] = <6,7,5>;
#declare r[3][3] = <7,7,5>;

#declare p[3][0] = (p[2][0]+q[1][0])/2;
#declare p[3][1] = (p[2][1]+q[1][1])/2;
#declare p[3][2] = (p[2][2]+q[1][2])/2;
#declare p[3][3] = (p[2][3]+q[1][3])/2;

#declare q[0][0] = p[3][0];
#declare q[0][1] = p[3][1];
#declare q[0][2] = p[3][2];
#declare q[0][3] = p[3][3];

#declare r[0][0] = (p[0][1] + q[2][0]);
#declare r[0][1] = <5,4,4>;
#declare r[0][2] = <6,4,4>;
#declare r[0][3] = <7,4,4>;

#declare xmin = 0;
#declare ymin = 0;
#declare xmax = 1;
#declare ymax = 1;

#macro meio(c0,c1,c2)
  union {
    object {retalho(p, rdb, c0, 3) rotate <0, 0, 180>}
    object {retalho(q, rdb, c1, 3) rotate <0, 0, 180>}
    // object {retalho(r, rdb, c2, 3) rotate <0, 0, 180>}
  }
#end

#macro cadeira()
  #object {union {
    object{meio(cret0,cret1,cret2)}
    object{meio(cret3,cret4,cret5) scale <1, -1, 1> } // Prof.
  }}
#end

cadeira()

#declare cmin = <  -7,  -4,  00 >;
#declare cmax = <  +1,  +4,  +7 >;

#include "eixos.inc"
#if (rdb > 0) eixos(5.0) #end

#include "gaiola.inc"
#if (rdb > 0) object{ gaiola(cmin,cmax) } #end
#if (rdb = 0) object{ gaipiso(cmin,cmax) } #end

#declare centro_cena = (cmin + cmax)/2 - 0.5*z;
#declare raio_cena = 0.55*vlength(cmax-cmin);
#declare dist_camera = 5*raio_cena;

#include "camlight.inc"
#declare dir_camera = < 7, 5, 3 >;
#declare intens_luz = 1.20;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)