// ====================================================================== // CORES E TEXTURAS #include "textures.inc" background{ color rgb < 0.75, 0.80, 0.85 > } // ====================================================================== // DESCRIÇÃO DA CENA #declare random_seed = seed (1153); #macro random() rand(random_seed) #end #macro vrandom() < 1-2*random(), 1-2*random(), 1-2*random() > #end #macro Q(xx,maxx) (xx) / (maxx) #end #macro relNivel(nivel, maxnivel) min(nivel-1, maxnivel-1)/(maxnivel-1) #end #macro comprimento(nivel, maxnivel, param) param * (1 - 0.6*relNivel(nivel, maxnivel)) #end #macro raio(nivel, maxnivel, param) #local q = relNivel(nivel, maxnivel); param * max(0.05, (1-q) / (q+0.4)); #end #declare MAX_Z = 0; //Altura da ponta mais alta. A camera foca em MAX_Z/2, centralizando a cena #macro Grana(centro, raio_ponta, tam_dinheiro, Tangente, chao) #local dir_y = vnormalize(Tangente); #local dir_z = vnormalize( vcross(dir_y, chao ) ); #local dir_x = vnormalize( vcross(dir_z, dir_y ) ); object { box { <0,0,0> <1, -1, 0.02> pigment { image_map { jpeg "1dolar.jpg"// [gamma GAMMA] [premultiplied BOOL] } } } scale <2.42, 1, 1> * tam_dinheiro //Ajusta o tamanho matrix Tangente à arvore, e caindo na direção do chao dir_y.x, dir_y.y, dir_y.z dir_z.x, dir_z.y, dir_z.z, 0 , 0 , 0> translate ponta + dir_x*raio_ponta //Coloca na ponta da arvore } #end #macro Galho(centro, direcao, nivel, maxnivel, tam_dinheiro, raio_func, comp_func) #local comp = comprimento(nivel, maxnivel, comp_func); #local raio_base = raio(nivel , maxnivel, raio_func); #local raio_ponta = raio(nivel+1, maxnivel, raio_func); #local ponta = centro+comp*vnormalize(direcao); #declare MAX_Z = max(MAX_Z, ponta.z); cone { centro, raio_base ponta, raio_ponta texture { Cherry_Wood } } //Desenha galhos recursivos #if (nivel <= maxnivel) #local dir1 = vaxis_rotate(direcao, vrandom(), random()*30 + 25); #local dir2 = vaxis_rotate(dir1, direcao, 120); #local dir3 = vaxis_rotate(dir1, direcao, -120); Galho(ponta, dir1, nivel+1+0.2*random(), maxnivel, tam_dinheiro, raio_func, comp_func) Galho(ponta, dir2, nivel+1+0.2*random(), maxnivel, tam_dinheiro, raio_func, comp_func) Galho(ponta, dir3, nivel+1+0.2*random(), maxnivel, tam_dinheiro, raio_func, comp_func) //È uma ponta => $$$$$$$ #else Grana(ponta, raio_ponta, tam_dinheiro, direcao, <0,0,-1> + 0.5*vrandom() ) #end #end //"Vazo" difference { cone { <0,0,5> 4 <0,0,0> 3 texture { Chrome_Metal } } cone { <0,0,7> 4 <0,0,2> 3 texture { Chrome_Metal } } } Galho( <0,0,0.1>, //BASE DA ARVORE <0,0,1>, //DIREÇÃO QUE A ARVORE CRESCE, 1,8, // 6 níveis de recursão 0.5, //largura da nota 1, //Parâmetro da Função RAIO_TRONCO(Nível) 7 //Parâmetro da COMPRIMENTO_TRONCO(Nível) ) #include "camlight.inc" #declare centro_cena = <0,0,MAX_Z/2>; #declare raio_cena = MAX_Z*1.3; #declare dir_camera = < 50, 0, 0 >; #declare dist_camera = 50.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)