// Last edited on 2023-12-28 09:34:23 by stolfi // Raio da grade debug: // #declare rdb = 0.05; #declare rdb = 0; background{ color rgb < 0.75, 0.80, 0.85 > } #include "eixos.inc" #include "retalho.inc" #declare tx = texture{ pigment{ color rgb < 0.5, 0, 0 > } finish{ diffuse 0.9 ambient 0.1 } } #macro perna() #local p = array[4][4]; #local p[1][0] = <4,0,2>; #local p[1][1] = <4,1,2>; #local p[1][2] = <4,2,2>; #local p[1][3] = <4,3,2>; #local p[2][0] = <5,0,0>; #local p[2][1] = <5,1,0>; #local p[2][2] = <5,2,0>; #local p[2][3] = <5,3,0>; #local p[3][0] = <6,0,1>; #local p[3][1] = <6,1,1>; #local p[3][2] = <6,2,1>; #local p[3][3] = <6,3,1>; p #end #macro assento() #local p = array[4][4]; #local p[1][0] = <1,0,1>; #local p[1][1] = <1,1,1>; #local p[1][2] = <1,2,1>; #local p[1][3] = <1,3,1>; #local p[2][0] = <2,0,2>; #local p[2][1] = <2,1,2>; #local p[2][2] = <2,2,2>; #local p[2][3] = <2,3,2>; p #end #macro encosto() #local p = array[4][4]; #local p[1][0] = <0,0,4>; #local p[1][1] = <0,1,4>; #local p[1][2] = <0,2,4>; #local p[1][3] = <0,3,4>; #local p[2][0] = <0,0,3>; #local p[2][1] = <0,1,3>; #local p[2][2] = <0,2,3>; #local p[2][3] = <0,3,3>; p #end #macro cabeca() #local p = array[4][4]; #local p[0][0] = <0,0,5>; #local p[0][1] = <0,1,5>; #local p[0][2] = <0,2,5>; #local p[0][3] = <0,3,5>; #local p[1][0] = <1,0,5>; #local p[1][1] = <1,1,5>; #local p[1][2] = <1,2,5>; #local p[1][3] = <1,3,5>; #local p[2][0] = <0,0,4>; #local p[2][1] = <0,1,4>; #local p[2][2] = <0,2,4>; #local p[2][3] = <0,3,4>; p #end #macro braco() #local p = array[4][4]; #local p[0][0] = <0,-3,3>; #local p[0][1] = <1,-3,3>; #local p[0][2] = <2,-3,3>; #local p[0][3] = <3,-3,3>; #local p[1][0] = <0,-2,4>; #local p[1][1] = <1,-2,4>; #local p[1][2] = <2,-2,4>; #local p[1][3] = <3,-2,4>; #local p[2][0] = <0,-1,1>; #local p[2][1] = <1,-1,1>; #local p[2][2] = <2,-1,1>; #local p[2][3] = <3,-1,1>; p #end #macro junta_pontas(p1, p2) #declare p1[0][0] = (p1[1][0] + p2[2][0])/2; #declare p1[0][1] = (p1[1][1] + p2[2][1])/2; #declare p1[0][2] = (p1[1][2] + p2[2][2])/2; #declare p1[0][3] = (p1[1][3] + p2[2][3])/2; #declare p2[3][0] = (p1[1][0] + p2[2][0])/2; #declare p2[3][1] = (p1[1][1] + p2[2][1])/2; #declare p2[3][2] = (p1[1][2] + p2[2][2])/2; #declare p2[3][3] = (p1[1][3] + p2[2][3])/2; #end #macro junta_braco(p_ass, p_bra, p_per, p_enc) #declare p_ass[0][0] = (p_ass[0][1] + p_ass[1][0] + p_bra[2][0] + p_enc[2][0])/4; #declare p_ass[1][0] = (p_ass[1][1] + p_bra[2][1])/2; #declare p_ass[2][0] = (p_ass[2][1] + p_bra[2][2])/2; #declare p_ass[3][0] = (p_ass[1][3] + p_ass[3][1] + p_bra[2][3] + p_per[1][0])/4; #declare p_bra[3][0] = (p_ass[0][1] + p_ass[1][0] + p_bra[2][0] + p_enc[2][0])/4; #declare p_bra[3][1] = (p_ass[1][1] + p_bra[2][1])/2; #declare p_bra[3][2] = (p_ass[2][1] + p_bra[2][2])/2; #declare p_bra[3][3] = (p_ass[1][3] + p_ass[3][1] + p_bra[2][3] + p_per[1][0])/4; #declare p_enc[3][0] = (p_ass[0][1] + p_ass[1][0] + p_bra[2][0] + p_enc[2][0])/4; #declare p_per[0][0] = (p_ass[1][3] + p_ass[3][1] + p_bra[2][3] + p_per[1][0])/4; #end #macro poltrona(c0,c1,c2,c3,c4) #local p1 = perna(); #local p2 = assento(); junta_pontas(p1, p2); #local p_per = p1; #local p1 = p2; #local p2 = encosto(); junta_pontas(p1, p2); #local p_ass = p1; #local p1 = p2; #local p2 = cabeca(); junta_pontas(p1, p2); #local p_enc = p1; #local p_cab = p2; #local p_bra = braco(); junta_braco(p_ass, p_bra, p_per, p_enc); #local per = retalho(p_per, rdb, c0, 3); #local ass = retalho(p_ass, rdb, c1, 3); #local enc = retalho(p_enc, rdb, c2, 3); #local cab = retalho(p_cab, rdb, c3, 3); #local bra = retalho(p_bra, rdb, c4, 3); union { object { per } object { ass } object { enc } object { cab } object { bra } } #end #macro poltrona_completa() union { object { poltrona(cret0, cret1, cret2, cret3, cret4) } object { poltrona(cret2, cret3, cret4, cret5, cret6) scale <0, -1, 0> translate <0, 6, 0>} } #end #declare cmin = < -1, -4, -1 >; #declare cmax = < +7, +10, +6 >; object{ poltrona_completa() } #include "eixos.inc" // #if (rdb > 0) object{ 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; #declare raio_cena = 0.65*vlength(cmax-cmin); #declare dist_camera = 7*raio_cena; #include "camlight.inc" #declare dir_camera = < 7, 4, 5 >; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)