// ============================================================================ // MC930A - Computacao Grafica ============================================= // Eduardo Uemura Okada RA 001606 ============================================= // Laboratorio 04 ============================================= // ============================================================================ // ============================================================================ // Declaracao de constantes =================================================== // ============================================================================ #declare MODO_SOLIDO = 0; #declare MODO_CRISTAL = 1; #declare MODO_ESPELHO = 2; // ============================================================================ // Declaracao de macros e texturas ============================================ // ============================================================================ #macro TexturaSolida ( Cor ) texture { pigment { color rgb Cor } finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 } } #end #macro TexturaCristal ( Cor ) texture { finish { ambient 0.1 diffuse 0.1 reflection 0.25 specular 1 roughness 0.001 } pigment { color Cor filter 1 } } interior { ior 1.5 } #end #macro TexturaEspelho ( Cor ) texture { finish { ambient 0.05 diffuse 0.05 reflection Cor specular 0.20 roughness 0.05 } pigment { rgb Cor } } #end #macro SelecionaCor ( Cor, Modo ) #switch ( Modo ) #case ( MODO_SOLIDO ) TexturaSolida (Cor) #break #case ( MODO_CRISTAL ) TexturaCristal (Cor) #break #case ( MODO_ESPELHO ) TexturaEspelho (Cor) #break #end #end // ============================================================================ // Declaracao de macros e objetos basicos ===================================== // ============================================================================ // Todos os objetos gerados ao redor de <0,0,0> // Paralelepipedo Tam = #macro Paralelepipedo ( Tam, Cor, Modo, Rotacao, Posicao ) box { -Tam/2 Tam/2 SelecionaCor ( Cor, Modo ) rotate Rotacao translate Posicao } #end #macro Cone ( Base, Topo, Altura, Cor, Modo, Rotacao, Posicao ) cone { < 0, -Altura/2, 0>, Base < 0, Altura/2, 0>, Topo SelecionaCor ( Cor, Modo ) rotate Rotacao translate Posicao } #end #macro Cilindro ( Altura, Raio, Cor, Modo, Rotacao, Posicao ) cylinder { < 0, -Altura/2, 0 >, < 0, Altura/2, 0 >, Raio SelecionaCor ( Cor, Modo ) rotate Rotacao translate Posicao } #end #macro Torus ( Menor, Maior, Cor, Modo, Rotacao, Posicao ) torus { Maior, Menor SelecionaCor ( Cor, Modo ) rotate Rotacao translate Posicao } #end #macro Esfera ( Raio, Cor, Modo, Rotacao, Posicao ) sphere { <0,0,0>, Raio SelecionaCor ( Cor, Modo ) rotate Rotacao translate Posicao } #end // ============================================================================ // Montagem de pecas compostas ================================================ // ============================================================================ #macro SemiEsfera ( Raio, Cor, Modo, Rotacao, Posicao ) difference { Esfera ( Raio, Cor, Modo, <0,0,0>, <0,-Raio/2,0> ) Paralelepipedo ( , Cor, Modo, <0,0,0>, < 0,-Raio/2-Raio-1,0 >) SelecionaCor ( Cor, Modo ) rotate Rotacao translate Posicao } #end #macro Disco ( Raio, Cor, Rotacao, Posicao ) #end // ============================================================================ // Montagem de pecas finais =================================================== // ============================================================================ // ============================================================================ // Camera e Iluminacao ======================================================== // ============================================================================ // original 20.00, 4.00, -30.00 camera { location < 20.00, 4.00, -30.00 > // Posição do observador. sky y // Qual direção é "para cima"? look_at < 0.00, 0.00, 0.00 > // Para onde a câmera está apontando. } light_source { < 10.0, +10.0, -10.0 > // Posição da lâmpada. color rgb 5 * < 1.00, 1.00, 1.00 > // Intensidade e corda luz. } // ============================================================================ // Composicao da Cena ========================================================= // ============================================================================ #declare CorPista = color rgb <0.1,0.15,0.18>; plane { <0,1,0>, 0 pigment { checker CorPista, CorPista } } sky_sphere { pigment { gradient y color_map { [ 0.5 color <0.4,0.42,0.66> ] // Cor alta [ 1.0 color <0.2,0.2,0.3> ] // Cor baixa } scale 2 translate -1 } } #declare Carrinho = union { // Roda esquerda Cilindro ( 4, 3, <0.1,0.1,0.1>, MODO_SOLIDO, <0,0,90>, <-7,3,0> ) // Ligador Cilindro ( 12, 1, <0.4,0.4,0.4>, MODO_SOLIDO, <0,0,90>, <0,3,0> ) // Roda direita Cilindro ( 4, 3, <0.1,0.1,0.1>, MODO_SOLIDO, <0,0,90>, <7,3,0> ) // Corpo posterior Paralelepipedo ( <6,5,8>, <0.7,0.2,0.2>, MODO_SOLIDO, <0,0,0>, <0,3,-2> ) // Corpo anterior Paralelepipedo ( <2,2,7>, <0.6,0.2,0.2>, MODO_SOLIDO, <0,0,0>, <0,1.5,-9.5> ) // Ligador Cilindro ( 8, 0.5, <0.4,0.4,0.4>, MODO_SOLIDO, <0,0,90>, <0,1.5,-9> ) // Roda esquerda frontal Cilindro ( 2, 1.5, <0.1,0.1,0.1>, MODO_SOLIDO, <0,0,90>, <-4,1.5,-9> ) // Roda direita frontal Cilindro ( 2, 1.5, <0.1,0.1,0.1>, MODO_SOLIDO, <0,0,90>, <4,1.5,-9> ) // Frente Paralelepipedo ( <10, 1, 2>, <0.7,0.2,0.2>, MODO_SOLIDO, <0,0,0>, <0,0.5,-9.5-3.5-1> ) // Piloto Esfera ( 2, <0.9,0.9,0.9>, MODO_SOLIDO, <0,0,0>, <0,5,0> ) } #macro Coluna ( Altura, Raio, Cor, Modo, Rotacao, Posicao ) lathe { linear_spline 12, <0,0>,<1,0>,<1,1>,<0.5,1>,<0.5,2>,<1,3>,<1,7>,<0.5,8>,<0.5,9>,<1,9>,<1,10>,<0,10> SelecionaCor ( Cor, Modo ) translate <0,-5,0> scale rotate Rotacao translate Posicao } #end #macro Ponte ( Comp, Altura, Prof, Cor, Modo, Rotacao, Posicao ) prism { linear_sweep linear_spline 0, 2, 6, <0,0>,<2,0>,<2,1>,<1,2>,<0,1>,<0,0> SelecionaCor ( Cor, Modo ) translate <-1,-1,-1> scale rotate <90,90,180> rotate Rotacao translate Posicao } #end #macro Laterais ( Passos, Posicao ) union { #declare contador = 0; #while ( contador < Passos ) Paralelepipedo ( <2,0.01,4>, <0.5,0.2,0.2>, MODO_SOLIDO, <0,0,0>, <0,0,contador*4> ) #declare contador = contador+2; #end #declare contador = 1; #while ( contador < Passos ) Paralelepipedo ( <2,0.01,4>, <1,1,1>, MODO_SOLIDO, <0,0,0>, <0,0,contador*4> ) #declare contador = contador+2; #end translate Posicao } #end #macro Canteiro ( Profundidade, Posicao ) Paralelepipedo ( <50,0.01,Profundidade>, <0.2,0.5,0.3>, MODO_SOLIDO, <0,0,0>, Posicao ) #end #macro PratodeComida ( Raio, Cor, Modo, Rotacao, Posicao ) lathe { linear_spline 10, <0,0.1>,<1.4,0.1>,<2,0.3>,<2.1,0.3>,<1.4,0>,<1.2,0>,<1.2,-0.1>,<1.1,-0.1>,<1.1,0>,<0,0> SelecionaCor ( Cor, Modo ) translate <0,-0.1,0> scale rotate Rotacao translate Posicao } #end #declare PortaodeChegada = union { Canteiro ( 100, <-31,0,0> ) Canteiro ( 100, <43,0,0> ) Laterais ( 50, <-5,0,7> ) Laterais ( 50, <17,0,7> ) Laterais ( 10, <-5,0,5-10*4> ) Laterais ( 10, <17,0,5-10*4> ) // Chao de grid box { <-5,-1,5> <17,0.001,20> pigment { checker color rgb <1,1,1> CorPista } } // Coluna Esquerda Coluna ( 13, 1, <0.2,0.2,0.2>, MODO_ESPELHO, <0,0,0>, <-5,6.5,5> ) // Coluna Direita Coluna ( 13, 1, <0.2,0.2,0.2>, MODO_ESPELHO, <0,0,0>, <17,6.5,5> ) // Ponte Superior Ponte ( 2,2,24,<0.2,0.2,0.2>, MODO_ESPELHO, <0,0,0>, <6,14,5> ) // Pratos de enfeite PratodeComida ( 2, <0.88,0.85,0.8>, MODO_SOLIDO, <-90,0,0>, <-5,13,3.8> ) PratodeComida ( 2, <0.88,0.85,0.8>, MODO_SOLIDO, <-90,0,0>, <17,13,3.8> ) PratodeComida ( 2, <0.88,0.85,0.8>, MODO_SOLIDO, <-90,0,0>, <6,13,3.8> ) } // F-1 #declare logo1 = text { ttf "arial.ttf" "F-1" 0.5, <0,7.5 - clock*10,0> } #declare logo1f = text { ttf "arial.ttf" "F-1" 0.5, <0,0,0> } #declare logo2 = text { ttf "arial.ttf" "ajudando" 0.5, <7.5 - clock*10,0,0> } #declare logo2f = text { ttf "arial.ttf" "ajudando" 0.5, <0,0,0> } #declare logo3 = text { ttf "arial.ttf" "Fome" 0.5, <-7.5 + clock*10,0,0> } #declare logo3f = text { ttf "arial.ttf" "Fome" 0.5, <0,0,0> } #declare logo4 = text { ttf "arial.ttf" "ZERO!" 0.5, 0 } object { PortaodeChegada } #declare CorFonte = <0.4,0.4,0.1>; #if (clock <= 0.60 ) object { logo1 TexturaEspelho ( CorFonte ) scale <4,4,4> translate <-13,8,0> } object { logo2 TexturaEspelho ( CorFonte ) scale <4,4,4> translate <-2,8,0> } object { logo3 TexturaEspelho ( CorFonte ) scale <4,4,4> translate <-12,0,0> } #else object { logo1f TexturaEspelho ( CorFonte ) scale <4,4,4> translate <-13,8,0> } object { logo2f TexturaEspelho ( CorFonte ) scale <4,4,4> translate <-2,8,0> } object { logo3f TexturaEspelho ( CorFonte ) scale <4,4,4> translate <-12,0,0> } object { Carrinho translate < 8,0, 100-clock*150> scale <0.8,1,1> } object { logo4 TexturaEspelho ( CorFonte ) scale <4,4,4> translate <0,0,100-clock*100> } #end