//Last edited on 2003-10-23 00:46:48 by stolfi // ============================================================================ // 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.9 specular 0.2 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 ======================================================== // ============================================================================ #declare ctr = < 0.00, 0.00, 0.00 >; #declare camdir = < 20.00, 4.00, -30.00 >; camera { location ctr + 1.00*camdir right 1.00*x up 0.75*y sky y look_at ctr } light_source { 5*< 30.0, +20.0, -5.0 > // Posição da lâmpada. color rgb 0.6 * < 1.00, 1.00, 1.00 > // Intensidade e corda luz. } light_source { 5*< 0.0, +10.0, -10.0 > // Posição da lâmpada. color rgb 1.2 * < 1.00, 1.00, 1.00 > // Intensidade e corda luz. } // ============================================================================ // Composicao da Cena ========================================================= // ============================================================================ plane { <0,1,0>, 0 pigment { checker color rgb <0.9,0.9,0.9>, color rgb <0.7,0.7,0.7> } } 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, 2.0*<0.1,0.1,0.1>, MODO_SOLIDO, <0,0,90>, <-7,3,0> ) // Ligador Cilindro ( 12, 1, 2.0*<0.4,0.4,0.4>, MODO_SOLIDO, <0,0,90>, <0,3,0> ) // Roda direita Cilindro ( 4, 3, 2.0*<0.1,0.1,0.1>, MODO_SOLIDO, <0,0,90>, <7,3,0> ) // Corpo posterior Paralelepipedo ( <6,5,8>, 1.4*<0.7,0.2,0.2>, MODO_SOLIDO, <0,0,0>, <0,3,-2> ) // Corpo anterior Paralelepipedo ( <2,2,7>, 1.5*<0.6,0.2,0.2>, MODO_SOLIDO, <0,0,0>, <0,1.5,-9.5> ) // Ligador Cilindro ( 8, 0.5, 2.0*<0.4,0.4,0.4>, MODO_SOLIDO, <0,0,90>, <0,1.5,-9> ) // Roda esquerda frontal Cilindro ( 2, 1.5, 2.0*<0.1,0.1,0.1>, MODO_SOLIDO, <0,0,90>, <-4,1.5,-9> ) // Roda direita frontal Cilindro ( 2, 1.5, 2.0*<0.1,0.1,0.1>, MODO_SOLIDO, <0,0,90>, <4,1.5,-9> ) // Frente Paralelepipedo ( <10, 1, 2>, 1.4*<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 ( <1.0,1.0,1.0> ) scale <4,4,4> translate <-13,8,0> } object { logo2 TexturaSolida ( <1.0,1.0,1.0> ) scale <4,4,4> translate <-2,8,0> } object { logo3 TexturaSolida ( <1.0,1.0,1.0> ) scale <4,4,4> translate <-12,0,0> } #else object { logo1f TexturaSolida ( <1.0,1.0,1.0> ) scale <4,4,4> translate <-13,8,0> } object { logo2f TexturaSolida ( <1.0,1.0,1.0> ) scale <4,4,4> translate <-2,8,0> } object { logo3f TexturaSolida ( <1.0,1.0,1.0> ) scale <4,4,4> translate <-12,0,0> } object { Carrinho translate < 10,0, 100-clock*150> } object { logo4 TexturaSolida ( <1.0,1.0,1.0> ) scale <4,4,4> translate <0,0,100-clock*100> } #end