/************************************************* * *** MC930 - COMPUTAÇÃO GRÁFICA *** * * Laboratório 8: Algoritmos dão em árvore * Projeto para exercitar o uso de macros. * * Autor: Volnei dos Santos (RA 010075) * 30/Nov/2004 ************************************************/ // ====================================================================== // CÂMERA camera { location <6.5, 6.5, 6.5> right -1.50*x up 1.00*y sky z look_at <0, 0, 4.5> rotate 30*z } // ====================================================================== // FONTES DE LUZ light_source { < 0, 15, 20> color rgb 5*<1.0 ,1.0 ,1.0> } light_source { < 10, 10, 1> color rgb 5*<1.0 ,1.0 ,1.0> } // ====================================================================== // DESCRIÇÃO DA CENA #declare gerador = seed(12345); // Textura do verde #declare clorofila = texture { pigment { rgb < 0.00, 1.00, 0.00> } finish { ambient 0.05 diffuse 0.05 } } // Textura do maduro #declare maduro = texture { pigment { rgb < 1.00, 0.50, 0.50> } finish { ambient 0.05 diffuse 0.05 } } // Textura do aco do vagao #declare madeira = texture { pigment { rgb < 1.0, 0.60, 0.60> } finish { diffuse 0.05 } } // Textura do cimento #declare cimento = texture { pigment { rgb < 0.90, 0.90, 0.90> } finish { diffuse 0.05 } } // Folha da árvore #declare folha = union { sphere { <0,0,0>, 0.15 texture{ clorofila } } } // Galho de uma árvore (caso base são ramos de folhas) #macro galho(n) union { #if(n=0) #local i = 0; #while(i < 5) union { cylinder { <0,0,0>, <0,0,0.8>, 0.05 texture{ madeira } } object{ folha translate 0.8*z } rotate 72*i } #local i = i + 1; #end #else cylinder { <0,0,0>, <0,0,1.3*n>, n*0.15 texture{ madeira } } // Colocará os galhos #local i = 0; #while(i < 360) #local i = i + rand(gerador)*90; object{ galho(n - 1) rotate 60*rand(gerador)*y translate 1.3*n*z rotate i*z } #end #end } #end // ====================================================================== // Desenho da cena, utilizando as figuras definidas // Fundo da cena background{ color rgb <0.75, 0.80, 1.0> } // Árvore union{ object { galho(3) } // Acrescenta um pequeno pedestal cylinder { <0,0,0>, <0,0,0.3>, 0.9 texture{ clorofila } } cylinder { <0,0,0>, <0,0,0.3>, 0.9 texture{ madeira } } cylinder { <0,0,0>, <0,0,0.3>, 1.0 texture{ cimento } } } // Colocando um chão na cena plane { z, 0 pigment { checker color rgb <0.6, 0.6, 0.6> color rgb <0.0, 0.0, 0.0> scale 2 } }