// Last edited on 2023-12-28 08:43:24 by stolfi #include "camlight.inc" #include "eixos.inc" #include "retalho.inc" background{ color rgb < 0.900, 0.950, 1.000 > } // Raio da grade debug: // #declare rdb = 0.05; #declare rdb = 0; #macro emenda_vert(X, Y) #declare X[0][0] = (X[1][0] + Y[2][0]) / 2; #declare X[0][1] = (X[1][1] + Y[2][1]) / 2; #declare X[0][2] = (X[1][2] + Y[2][2]) / 2; #declare X[0][3] = (X[1][3] + Y[2][3]) / 2; #declare Y[3][0] = X[0][0]; #declare Y[3][1] = X[0][1]; #declare Y[3][2] = X[0][2]; #declare Y[3][3] = X[0][3]; #end #macro emenda_braco(W, Z) #declare Z[0][0] = W[3][0]; #declare Z[0][1] = W[2][0]; #declare Z[0][2] = W[1][0]; #declare Z[0][3] = W[0][0]; #declare Z[1][0] = (2 * Z[0][0]) - W[3][1]; #declare Z[1][1] = (2 * Z[0][1]) - W[2][1]; #declare Z[1][2] = (2 * Z[0][2]) - W[1][1]; #declare Z[1][3] = (2 * Z[0][3]) - W[0][1]; #end #macro encosto(h1, h2, larg, incl) #local E = array[4][4]; #local E[0][0] = <0, 0, 0>; // calculada #local E[0][1] = <0, 0, 0>; // calculada #local E[0][2] = <0, 0, 0>; // calculada #local E[0][3] = <0, 0, 0>; // calculada #local E[1][0] = ; #local E[1][1] = ; #local E[1][2] = <0, -incl, h1 - 1>; #local E[1][3] = <0, -incl, h1 - 1>; #local E[2][0] = ; #local E[2][1] = ; #local E[2][2] = <0, -incl, h2 + 1>; #local E[2][3] = <0, -incl, h2 + 1>; #local E[3][0] = ; #local E[3][1] = ; #local E[3][2] = <0, -2*incl, h2>; #local E[3][3] = <0, -2*incl, h2>; E #end #macro assento(h1, h2, larg, incl) #local A = array[4][4]; #local A[0][0] = ; #local A[0][1] = ; #local A[0][2] = <0, 2*larg, h1>; #local A[0][3] = <0, 2*larg, h1>; #local A[1][0] = ; #local A[1][1] = ; #local A[1][2] = <0, 2*larg - 1 , h1 - 1>; #local A[1][3] = <0, 2*larg - 1 , h1 - 1>; #local A[2][0] = ; #local A[2][1] = ; #local A[2][2] = <0, 0 + 1, h1 + 1>; #local A[2][3] = <0, 0 + 1, h1 + 1>; #local A[3][0] = <0, 0, 0>; // calculada #local A[3][1] = <0, 0, 0>; // calculada #local A[3][2] = <0, 0, 0>; // calculada #local A[3][3] = <0, 0, 0>; // calculada A #end #macro perna(h1, h2, larg, incl) #local P = array[4][4]; #local P[0][0] = ; #local P[0][1] = ; #local P[0][2] = <0, (2*larg) + incl, 1>; #local P[0][3] = <0, (2*larg) + incl, 1>; #local P[1][1] = ; #local P[1][0] = ; #local P[1][2] = <0, (2*larg) + incl - 1, 0>; #local P[1][3] = <0, (2*larg) + incl - 1, 0>; #local P[2][0] = ; #local P[2][1] = ; #local P[2][2] = <0, 2*larg + 1 , h1 + 1>; #local P[2][3] = <0, 2*larg + 1 , h1 + 1>; #local P[3][0] = ; #local P[3][1] = ; #local P[3][2] = <0, 2*larg, h1>; #local P[3][3] = <0, 2*larg, h1>; P #end #macro braco(h1, h2, larg, incl) #local B = array[4][4]; #local h3 = 6; #local B[0][0] = ; #local B[0][1] = ; #local B[0][2] = ; #local B[0][3] = ; #local B[1][1] = ; #local B[1][0] = ; #local B[1][2] = ; #local B[1][3] = ; #local B[2][0] = ; #local B[2][1] = ; #local B[2][2] = ; #local B[2][3] = ; #local B[3][0] = ; #local B[3][1] = ; #local B[3][2] = ; #local B[3][3] = ; B #end #declare chao = box{ <-50,-50,-1>, <+50,+50,0> } #macro cadeira(h1, h2, larg, incl_braco, incl_enc, incl_per, incl_ass) #local E = encosto(h1, h2, larg, incl_enc) #local A = assento(h1, h2, larg, incl_ass) #local P = perna(h1, h2, larg, incl_per) #local B = braco(h1, h2, larg, incl_braco) emenda_vert(E, A); emenda_vert(A, P); emenda_braco(A, B) union { object { retalho(E, rdb, cret0, 3) translate < 0,0,0 > } object { retalho(A, rdb, cret1, 3) translate < 0,0,0 > } object { retalho(P, rdb, cret2, 3) translate < 0,0,0 > } object { retalho(B, rdb, cret3, 3) translate < 0,0,0 > } object { retalho(E, rdb, cret4, 3) translate < 0,0,0 > scale <-1, 0, 0> } object { retalho(A, rdb, cret5, 3) translate < 0,0,0 > scale <-1, 0, 0> } object { retalho(P, rdb, cret6, 3) translate < 0,0,0 > scale <-1, 0, 0> } object { retalho(B, rdb, cret7, 3) translate < 0,0,0 > scale <-1, 0, 0> } } #end #declare duas = true; // object { chao translate < 0,0,0 > texture{ tx_xadrez } } #include "eixos.inc" #if (rdb > 0) object{ eixos(5.0) } #end #if (duas) #declare cmin = < -11, -9, -1 >; #declare cmax = < +11, +15, +15 >; object{ cadeira(4, 12, 2, 1,2,5,2) translate -5*x } object{ cadeira(5, 10, 3, 2,4,8,5) translate +5*x } #else #declare cmin = < -5, -5, -1 >; #declare cmax = < +5, +10, +15 >; object{ cadeira(4, 12, 2, 1,2,5,2) } #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.50*vlength(cmax-cmin); #declare dist_camera = 7*raio_cena; #declare dir_camera = < 4, 9, 3 >; #declare intens_luz = 1.0; camlight(centro_cena, raio_cena, dir_camera, dist_camera, z, intens_luz)