// Diego Alves Nascimento RA 042954 // MO603-B // TP13 : Tema (quase) livre: Arquibancada Animada // ====================================================================== // 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_azul = texture{ pigment{ color rgb < 0.10, 0.20, 1.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_vermelha = texture{ pigment{ color rgb < 1.00, 0.20, 1.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_branca = texture{ pigment{ color rgb < 1.00, 1.00, 1.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_Escadaria = texture{ pigment{ color rgb < 0.50, 0.80, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } // Numeros Aleatorios: #declare rolete = seed(315); // ====================================================================== // DESCRIÇÃO DA CENA // Partes da cena: #include "eixos.inc" // *********************************** // Definicao do Torcedor: #declare Membro = union{ sphere{ <0, 0, 0> 1 } cylinder{ <0, 0, 0>, <0, 0, -5>, 1 } sphere{ <0, 0, -5> 1 } scale 0.3 } #declare Tronco = cylinder{ <0, 0, 0>, <0, 0, -5>, 2 scale 0.5 } #declare Cabeca = union{ sphere{<0, 0, 2> 1 } cone{<0, 0, 1.1>, 0.5, <0, 0, 0>, 0.7 } } #declare Pessoa = union{ object{ Tronco } object{ Membro translate y*1.2 } //Braço esquerdo object{ Membro translate y*(-1.2) } //Braço direito object{ Membro translate <0, 0.5, -2.2> } //Perna esquerda object{ Membro translate <0, -0.5, -2.2> } //Perna direita object{ Cabeca scale 0.5} translate <-0.5, 3, 8> //Coloca a pessoa no primeiro lugar da Escada scale 0.3 } //******************************************************** // Definicao da cadeira #declare cadeira = union{ box{<0, 0, 0>, <-.5, .5, .1>} box{<-.4, 0, 0>, <-.5, .5, .5>} translate <-0.25, 0.25, 1> // Coloca uma cadeira na primeira posicao } // Macro que cria a arquibancada sem cadeiras #macro MacroEscada(Degraus, Largura, tx) #declare i = 0; union{ #while(i < Degraus) box{< 0-i, 0, 0 >, < -1-i, Largura, 1+i > texture{tx} } #declare i = i+0.5; #end } #end // Macro que cria um torcedor de cor aleatória #macro MacroTorcedor(tx) #if (rand(rolete) <0.25) object{ Pessoa texture{tx_azul} } #else #if (rand(rolete) < 0.33) object{ Pessoa texture{tx_vermelha} } #else object{ Pessoa texture{tx_branca} } #end #end #end // Macro que gera um número aleatório diferente a cada chamada #macro deslocamento(sd) #declare sd = sd+10; #declare rndmov = rand(seed(sd)); #end // Macro que cria uma seção da arquibancada, com cadeiras e torcedores coloridos #macro MacroSecao(Degraus, Largura, txSecao, txCadeira) #declare i = 0; #declare sd = 0; union{ #while(i < Degraus) deslocamento(sd) // gera um novo numero aleatorio rndmov box{< 0-i, 0, 0 >, < -1-i, Largura, 1+i > texture{txSecao} } #declare j = 0; #while(j < Largura) deslocamento(sd) //gera um novo numero aleatorio rndmov object { cadeira translate<0-i, j, 0+i> texture{txCadeira} } #if (clock > rndmov) // translada o torcedor de acordo com o clock object{ MacroTorcedor(tx_azul) translate<0-i, j, 0+i> translate sin((clock-rndmov)*pi)*z*rand(rolete)} #end #if (clock <= rndmov) // translada o torcedor de acordo com o clock object{ MacroTorcedor(tx_azul) translate<0-i, j, 0+i> translate sin((rndmov-clock)*pi)*z*rand(rolete)} #end #declare j = j+1; #end #declare i = i+1; #end } #end //=============================================================================== // Cria A Cena: object{ MacroSecao(4, 15, tx_plastico, tx_fosca) } // Parte inferior e mais larga object{ MacroSecao(2, 3, tx_plastico, tx_fosca) translate <-4, 0, 4> } //Parte superior esquerda object{ MacroEscada(2, 2, tx_Escadaria) translate<-4, 3, 4> } //Escada sup. esquerda object{ MacroSecao(2, 5, tx_plastico, tx_fosca) translate <-4, 5, 4> } //Parte superior central object{ MacroEscada(2, 2, tx_Escadaria) translate<-4, 10, 4> } //Escada sup. dir. object{ MacroSecao(2, 3, tx_plastico, tx_fosca) translate <-4, 12, 4> } // Parte sup. dir. #include "camlight.inc" #declare centro_cena = < -1.00, 12.00, 8.00 >; #declare raio_cena = 10.0; #declare dir_camera = < 2.00, 2.00, 2.00 >; #declare dist_camera = 10.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)