#include "eixos.inc" #include "retalho-simples.inc" // CORES E TEXTURAS #declare txg = texture{ pigment{ color rgb < 1, 1, 1 > } finish{ diffuse 0.9 ambient 0.1 } } #declare txr = texture{ pigment{ color rgb < 1, 0, 1 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_fosca3 = texture{ pigment{ color rgb < 0.3, 0.6, 0.154 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_fosca4 = texture{ pigment{ color rgb < 1, 0, 0 > } finish{ diffuse 0.9 ambient 0.1 } } // ====================================================================== // DESCRIÇÃO DA CENA #macro emenda_retalho(PP, r0, s0, r1, s1) //horizontal #if(r0 = r1 & s0 + 1 = s1) emenda_horizontal(PP, r0, s0, r1, s1) #end //vertical #if(r0+1 = r1 & s0 = s1) emenda_vertical(PP, r0, s0, r1, s1) #end #end #macro emenda_vertical(PP, r0, s0, r1, s1) #for(j, 0, 3, 1) #local ponto_medio = (PP[r0][s0][2][j] + PP[r1][s1][1][j]) /2; #declare PP[r0][s0][3][j] = ponto_medio; #declare PP[r1][s1][0][j] = ponto_medio; #end #end #macro emenda_horizontal(PP, r0, s0, r1, s1) #for(i, 0, 3, 1) #local ponto_medio = (PP[r0][s0][i][2] + PP[r1][s1][i][1]) /2; #declare PP[r0][s0][i][3] = ponto_medio; #declare PP[r1][s1][i][0] = ponto_medio; #end #end #macro carroceria(PP, NH, NV) union{ #for(i, 0, NV - 1, 1) #for(j, 0, NH - 1, 1) #local P = array[4][4]; #for(k, 0, 3, 1) #for(l, 0, 3, 1) #local P[k][l] = PP[i][j][k][l]; #end #end object { retalho(P, 0.04, txg, txr) } #end #end } #end #macro frenteCarro(PP, NH, NV) #local p = PP[1][0][3][0]; #local PP[1][0][3][0] = ; #local p = PP[0][0][0][0]; #local PP[0][0][0][0] = ; #local p = PP[0][0][0][3]; #local PP[0][0][0][3] = ; #local p = PP[0][0][1][3]; #local PP[0][0][1][3] = ; #local p = PP[0][0][2][3]; #local PP[0][0][2][3] = ; #local p = PP[0][0][3][3]; #local PP[0][0][3][3] = ; #local p = PP[1][0][0][3]; #local PP[1][0][0][3] = ; #local p = PP[1][0][1][3]; #local PP[1][0][1][3] = ; #local p = PP[1][0][2][3]; #local PP[1][0][2][3] = ; #local p = PP[1][0][3][3]; #local PP[1][0][3][3] = ; PP #end #macro matrizPrincipal(NH, NV) #local PP = array[NV][NH][4][4]; #for(i, 0, NV - 1, 1) #for(j, 0, NH - 1, 1) #for(k, 0, 3, 1) #for(l, 0, 3, 1) #local PP[i][j][k][l] = ; #end #end #end #end PP #end #macro tetoCarro(PP, NH, NV) #for(teto_i, 0, 1, 1) #for(i, 0, 2, 1) #for(j, 0, 2, 1) #local p = PP[teto_i][1][i][j]; #local PP[teto_i][1][i][j] = ; #end #end #end PP #end #macro traseiraCarro(PP, NH, NV) #local p = PP[1][2][0][3]; #local PP[1][2][0][3] = ; #local p = PP[1][2][1][3]; #local PP[1][2][1][3] = ; #local p = PP[1][2][2][3]; #local PP[1][2][2][3] = ; #local p = PP[1][2][3][3]; #local PP[1][2][3][3] = ; //bagageiro R #local p = PP[0][2][0][3]; #local PP[0][2][0][3] = ; #local p = PP[0][2][1][3]; #local PP[0][2][1][3] = ; #local p = PP[0][2][2][3]; #local PP[0][2][2][3] = ; #local p = PP[0][2][3][3]; #local PP[0][2][3][3] = ; PP #end // Partes da cena: union{ object{ eixos(3.00) } #local NH = 3; #local NV = 2; #local PP = matrizPrincipal(NH, NV); #local PP = frenteCarro(PP, NH, NV); #local PP = tetoCarro(PP, NH, NV); #local PP = traseiraCarro(PP, NH, NV); //emenda horizontal emenda_retalho(PP, 0,0,0,1) emenda_retalho(PP, 0,0,1,0) emenda_retalho(PP, 1,0,1,1) emenda_retalho(PP, 1,1,1,2) //emenda vertical emenda_retalho(PP, 0,0,1,0) emenda_retalho(PP, 0,1,1,1) emenda_retalho(PP, 0,2,1,2) object{ carroceria(PP, NH, NV)} } #include "camlight.inc" #declare centro_cena = < 0,2,-2>; #declare raio_cena = 13; #declare dir_camera = < 2,1,1 >; #declare dist_camera = 2*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)