// ============================================================================ // 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 ======================================================== // ============================================================================ 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 ========================================================= // ============================================================================ plane { <0,1,0>, 0 pigment { checker color rgb <.2,.2,.2>, color rgb <.1,.1,.1> } } 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> ) } // 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 } #if (clock <= 0.60 ) object { logo1 TexturaSolida ( <0.8,0.8,0.8> ) scale <4,4,4> translate <-13,8,0> } object { logo2 TexturaSolida ( <0.8,0.8,0.8> ) scale <4,4,4> translate <-2,8,0> } object { logo3 TexturaSolida ( <0.8,0.8,0.8> ) scale <4,4,4> translate <-12,0,0> } #else object { logo1f TexturaSolida ( <0.8,0.8,0.8> ) scale <4,4,4> translate <-13,8,0> } object { logo2f TexturaSolida ( <0.8,0.8,0.8> ) scale <4,4,4> translate <-2,8,0> } object { logo3f TexturaSolida ( <0.8,0.8,0.8> ) scale <4,4,4> translate <-12,0,0> } object { Carrinho translate < 10,0, 100-clock*150> } object { logo4 TexturaSolida ( <0.8,0.8,0.8> ) scale <4,4,4> translate <0,0,100-clock*100> } #end