// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2015-06-29 15:46:43 by stolfilocal // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_plastico = texture{ pigment{ color rgb < 0.10, 0.80, 1.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_fosca = texture{ pigment{ color rgb < 1.00, 0.80, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_espelho = texture{ pigment{ color rgb < 1.00, 0.85, 0.30 > } finish{ diffuse 0.2 reflection 0.7*< 1.00, 0.85, 0.30 > ambient 0.1 } } #declare tx_vidro = texture{ pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.70 } finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 } } #declare tx_xadrez = texture{ pigment{ checker color rgb < 0.10, 0.32, 0.60 >, color rgb < 1.00, 0.97, 0.90 > } finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } #declare tx_nota = texture{ pigment{ uv_mapping image_map{ jpeg "tres-reais.jpg" } } finish{ diffuse 0.5 ambient 0.1 } } // ====================================================================== // DESCRIÇÃO DA CENA #declare chao = box{ <-20,-20,-1>, <+20,+20,0> } #include "eixos.inc" #include "retalho.inc" #include "tubo.inc" // Aqui está a cena, finalmente: #declare txg = texture{ tx_plastico } #declare txr = texture{ pigment{ uv_mapping image_map{ png "algarismos.png" } } finish{ diffuse 0.9 ambient 0.1 } } #declare txs = texture{ pigment{ uv_mapping image_map{ png "algarismos.png" } } finish{ diffuse 0.5 ambient 0.1 } } #macro teste_retalho() #local rad = 0.02; #local A = array[4][4] #local A[0][0] = < 00, 00, 00 >; #local A[0][1] = < 00, +1, 00 >; #local A[0][2] = < 00, +2, 00 >; #local A[0][3] = < 00, +3, 00 >; #local A[1][0] = < +1, 00, 00 >; #local A[1][1] = < +1, +1, 00 >; #local A[1][2] = < +1, +2, +3 >; #local A[1][3] = < +1, +3, 00 >; #local A[2][0] = < +2, 00, 00 >; #local A[2][1] = < +2, +1, 00 >; #local A[2][2] = < +2, +2, 00 >; #local A[2][3] = < +2, +3, 00 >; #local A[3][0] = < +3, 00, 00 >; #local A[3][1] = < +3, +1, 00 >; #local A[3][2] = < +3, +2, 00 >; #local A[3][3] = < +3, +3, 00 >; object{ retalho(A, rad, txg, txr, 0.2, 0.2, 0.8, 0.4) } #end #macro teste_costura() #local rad = 0.02; #local B = array[4][4]; #local C = array[4][4]; #local D = array[4][4]; tubo_retalho_padrao(B, < 5,00,3>) tubo_retalho_padrao(C, <10,00,1>) tubo_retalho_padrao(D, <5,5,2>) //tubo_costura(B, 0,3,1,0, C,0,0,1,0) tubo_costura(B, 3,0,0,1, D,0,0,0,1) union{ retalho(B, rad, txg, txr, 0.2, 0.2, 0.8, 0.4) retalho(C, rad, txg, txr, 0.2, 0.2, 0.8, 0.4) retalho(D, rad, txg, txr, 0.2, 0.2, 0.8, 0.4) } #end #macro teste_tubo_1() #local rad = 0.02; union{ #local O1 = <0,0,0>; #local R1 = <2,0,0>; #local S1 = <0,3,0>; #local d1 = 1.0; #local t1 = 0.0; #local O2 = <1,0,5>; #local R2 = 0.001*<1,1,0>; #local S2 = 0.001*<-1,1,1>; #local d2 = 0.0; #local t2 = 1000.0; object{ tubo_2(O1,R1,S1,d1,t1, O2,R2,S2,d2,t2, rad, txg, txr, txs, txr, txs) } } #end #macro teste_tubo_2() #local rad = 0.02; union{ #local O1 = <0,0,0>; #local R1 = <2,0,0>; #local S1 = <0,3,0>; #local d1 = 1.0; #local t1 = 0.0; #local O2 = <0,0,5>; #local R2 = <1,1,0>; #local S2 = <-1,1,0>; #local d2 = 1.0; #local t2 = 0.0; object{ tubo_2(O1,R1,S1,d1,t1, O2,R2,S2,d2,t2, rad, txg, txr, txs, txr, txs) } } #end #macro teste_tubo_3() #local rad = 0.02; union{ #local O0 = < 0, 0, 0 >; #local X0 = x; #local Y0 = y; #local Z0 = z; #local RO = 7.0; // Distância do centro da junta às bocas. #local RB = 1.0; // Raio das bocas. #local A1 = 000; #local ar1 = radians(A1); #local O1 = O0 + RO * (cos(ar1)*X0 + sin(ar1)*Y0); #local R1 = RB * vnormalize(Z0); #local S1 = RB * vnormalize(- sin(ar1)*X0 + cos(ar1)*Y0); #local d1 = 0.30*RO; #local t1 = 0.0; #local A2 = 120; #local ar2 = radians(A2); #local O2 = O0 + RO * (cos(ar2)*X0 + sin(ar2)*Y0); #local R2 = RB * vnormalize(Z0); #local S2 = RB * vnormalize(- sin(ar2)*X0 + cos(ar2)*Y0); #local d2 = 0.30*RO; #local t2 = 0.0; #local A3 = 210; #local ar3 = radians(A3); #local O3 = O0 + RO * (cos(ar3)*X0 + sin(ar3)*Y0); #local R3 = RB * vnormalize(Z0); #local S3 = RB * vnormalize(- sin(ar3)*X0 + cos(ar3)*Y0); #local d3 = 0.30*RO; #local t3 = 0.0; object{ tubo_3(O0,X0,Y0,Z0, A1,O1,R1,S1,d1,t1, A2,O2,R2,S2,d2,t2, A3,O3,R3,S3,d3,t3, rad, txg, txr, txs, txr, txs) } } #end #macro arvore_jovem(idade) // Árvore sem sub-árvores. #local raio_base = sqrt(idade); #local altura = 3*sqrt(sqrt(idade*idade*idade)); #local R_base = raio_base*x; #local S_base = raio_base*y; #local O_base = 0*z; #local d_base = raio_base; #local t_base = 0.0; #local raio_topo = 0.001*raio_base; #local R_topo = raio_topo*x; #local S_topo = raio_topo*y; #local O_topo = altura*z; #local d_topo = raio_topo; #local t_topo = raio_base/raio_topo - 1; #local rad = 0.01; object{ tubo_2( O_base, R_base, S_base, d_base, t_base, O_topo, R_topo, S_topo, d_topo, t_topo, rad,txg, txr,txs,txr,txs ) } #end #macro arvore_velha(idade) // Árvore com sub-árvores. #local raio_base_tronco = sqrt(idade); #local altura_tronco = 3*sqrt(sqrt(idade*idade*idade)); #local idade_ramos = idade - 1; #local raio_base_ramos = sqrt(idade_ramos); #local raio_???_junta = sqrt(2)*raio_base_ramos; #local altura_junta = 2*raio_base_junta; #local raio_topo_tronco = raio_base_junta + 0.001; // Base do tronco #local R_base_tronco = raio_base_tronco*x; #local S_base_tronco = raio_base_tronco*y; #local O_base_tronco = 0*z; #local d_base_tronco = raio_base_tronco; #local t_base_tronco = 0.0; // Tiopo do tronco / base da junta Y #local R_topo = raio_topo*x; #local S_topo = raio_topo*y; #local O_topo = altura*z; #local d_topo = raio_topo; #local t_topo = raio_base/raio_topo - 1; #local rad = 0.01; object{ tubo_2( O_base, R_base, S_base, d_base, t_base, O_topo, R_topo, S_topo, d_topo, t_topo, rad,txg, txr,txs,txr,txs ) } #end #macro arvore_crescendo(idade) #if (idade <= 1.0001) arvore_jovem(idade) #else arvore_velha(idade) #end #end union{ object{ eixos(5.00) } object{ chao translate < 0,0,-5 > texture{ tx_xadrez } } //object{ teste_tubo_1() } object{ arvore_jovem(0.1) translate -2*y } object{ arvore_jovem(0.5) translate 00*y } object{ arvore_jovem(0.9) translate +2*y } } #include "camlight.inc" #declare centro_cena = <0,0,0>; #declare raio_cena = 10.0; #declare dir_camera = < -14.00, -7.00, 12.00 >; #declare dist_camera = 50.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)