// Last edited on 2011-05-06 13:46:34 by stolfi // Macros para arvores (recursivas) #macro arvore(P, H, RT, RF, rol, fase) // Gera uma arvore com base do tronco na origem. // {P} = numero de ramificacoes da arvore adulta. // {H} = altura do tronco da arvore adulta. // {RT} = raio do tronco da arvore adulta. // {RF} = raio da folha. // {rol} = um gerador de números aleatórios. // {fase} = estagio de crescimento (0 a 1). #local rt = RT*fase; #local h = H*fase + 0.0001; #local finf = 0.20; // Fase do fim da infância. #local rolA = seed(int(rand(rol)*10000)); #local rolB = seed(int(rand(rol)*10000)); union{ cone{ <0,0,0>, rt, <0,0,h>, 0.8*rt texture{ tinta_casca } } sphere{ <0,0,h>, 0.8*rt texture{ tinta_casca } } #if ((P <= 0) | (fase < finf)) // Não ramifica. sphere{ <0,0,h>, RF texture{ tinta_folha } } #else // Ramifica. #local fg = (fase - finf)/(1.00 - finf); // Fase galhos. object{ arvore(P-1, 0.75*H, 0.75*RT, RF, rolA, fg) rotate rand(rol)*360*z rotate +20*y translate <0,0,h> } object{ arvore(P-1, 0.65*H, 0.65*RT, RF, rolB, fg) rotate rand(rol)*360*z rotate -60*y translate <0,0,h> } #end } #end