// Last edited on 2023-12-28 16:07:49 by stolfi // ====================================================================== // MC937A/MO603A – Computacao Grafica - 2023-S2 // Trabalho de laboratorio 09 - 2023-11-29 // Last edited on DATE TIME by USER // Poltrona para gamer // // RA108231 - Oscar dos Santos Esgalha Neto // ====================================================================== background{ color rgb < 0.7, 0.7, 0.9 > } #include "retalho.inc" // Raio da grade debug: // #declare rdb = 0.03; #declare rdb = 0; #macro meia_poltrona(c0,c1,c2,c3) #local encosto = array[4][4] { {<0, -2.2, 6>, <1, -2.2, 6>, <2, -2.2, 6>, <3, -2.2, 6>}, {<0, -2, 10>, <1, -2, 10>, <2, -2, 10>, <3, -2, 10>}, {<0, 1, 6>, <1, 1, 6>, <2, 1, 6>, <3, 1, 6>}, {<0, 0, 0>, <0, 0, 0>, <0, 0, 0>, <0, 0, 0>} }; #local assento = array[4][4] { {<0, 0, 0>, <0, 0, 0>, <0, 0, 0>, <0, 0, 0>}, {<0, 0, 0>, <1, 0, 0>, <2, 0, 0>, <3, 0, 0>}, {<0, 6, 4>, <1, 6, 4>, <2, 6, 4>, <3, 6, 4>}, {<0, 0, 0>, <0, 0, 0>, <0, 0, 0>, <0, 0, 0>} }; // Ligando sem quinas #local encosto[3][0] = (encosto[2][0] + assento[1][0]) / 2; #local assento[0][0] = encosto[3][0]; #local encosto[3][1] = (encosto[2][1] + assento[1][1]) / 2; #local assento[0][1] = encosto[3][0]; #local encosto[3][2] = (encosto[2][2] + assento[1][2]) / 2; #local assento[0][2] = encosto[3][2]; #local encosto[3][3] = (encosto[2][3] + assento[1][3]) / 2; #local assento[0][3] = encosto[3][3]; #local apoio_pes = array[4][4] { {<0, 0, 0>, <0, 0, 0>, <0, 0, 0>, <0, 0, 0>}, {<0, 6, -2>, <1, 6, -2>, <2, 6, -2>, <3, 6, -2>}, {<0, 6, -2>, <1, 6, -2>, <2, 6, -2>, <3, 6, -2>}, {<0, 8, -2>, <1, 8, -2>, <2, 8, -2>, <3, 8, -2>} }; #local assento[3][0] = (assento[2][0] + apoio_pes[1][0]) / 2; #local apoio_pes[0][0] = assento[3][0]; #local assento[3][1] = (assento[2][1] + apoio_pes[1][1]) / 2; #local apoio_pes[0][1] = assento[3][0]; #local assento[3][2] = (assento[2][2] + apoio_pes[1][2]) / 2; #local apoio_pes[0][2] = assento[3][2]; #local assento[3][3] = (assento[2][3] + apoio_pes[1][3]) / 2; #local apoio_pes[0][3] = assento[3][3]; #local braco = array[4][4] { {<-2, assento[0][0].y, 1>, <-1, assento[0][0].y, 4>, <0, 0, 0>, assento[0][0]}, {<-2, assento[1][0].y, 1>, <-1, assento[1][0].y, 4>, <0, 0, 0>, assento[1][0]}, {<-2, assento[2][0].y, 1>, <-1, assento[2][0].y, 4>, <0, 0, 0>, assento[2][0]}, {<-2, assento[3][0].y, 1>, <-1, assento[3][0].y, 4>, <0, 0, 0>, assento[3][0]} }; #local braco[0][2] = 2 * braco[0][3] - braco[0][1]; #local braco[1][2] = 2 * braco[1][3] - braco[1][1]; #local braco[2][2] = 2 * braco[2][3] - braco[2][1]; #local braco[3][2] = 2 * braco[3][3] - braco[3][1]; object { union { retalho(encosto, rdb, c0, 3) retalho(assento, rdb, c1, 3) retalho(apoio_pes, rdb, c2, 3) retalho(braco, rdb, c3, 3) } } #end #macro poltrona() union { object { meia_poltrona(cret0,cret1,cret2,cret3) } object { meia_poltrona(cret4,cret5,cret6,cret7) scale <-1, +1, +1> translate <4, 0, 0> } } #end object { poltrona() } #declare cmin = < -4, -3, -3 >; #declare cmax = < +7, +9, +10 >; #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; #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)