// ====================================================================== // MC937A/MO603A – Computacao Grafica - 2023-S2 // Trabalho de laboratorio 08 - 2023-11-08 // Robô preguiça // // RA108231 - Oscar dos Santos Esgalha Neto // ====================================================================== background{ color rgb < 0.7, 0.7, 0.9 > } #declare textura = texture{ pigment{ color rgb < 0.7, 0.4, 0.2 > } finish{ diffuse 0.8 ambient 0.1 } } #declare RAIO_MEMBRO = 0.25; #macro pescobaixo(P2, P3, P4) #local tronco = cylinder{ < 0, 0, 0 >, < 3, 0, 0 >, RAIO_MEMBRO texture { textura } } #local sub = object { pescotopo(P3, P4) } union { object { tronco } object { sub rotate P2 * y translate <3, 0, 0> } } #end #macro pescotopo(P3, P4) #local tronco = cylinder{ < 0, 0, 0 >, < 3, 0, 0 >, RAIO_MEMBRO texture { textura } } #local sub = object { cabeca() } union { object { tronco } object { sub translate <1, 0, 0> rotate P3 * y rotate P4 * z translate <3, 0, 0> } } #end #macro cabeca() #local tronco = sphere { <0, 0, 0>, 1 texture { textura } } #local olho = sphere { <0, 0, 0>, 0.2 texture { pigment{ color rgb < 0.1, 0.1, 0.1 > } finish{ diffuse 0.8 ambient 0.1 } } } union { object { tronco } object { olho translate <1, 0.2, 0> } object { olho translate <1, -0.2, 0> } } #end #macro membro(L3, L4) #local tronco = cylinder{ < 0, 0, 0 >, < 3, 0, 0 >, RAIO_MEMBRO texture { textura } } #local sub = object { submembro(L4) } union { object { tronco } object { sub rotate L3 * y translate <3, 0, 0> } } #end #macro submembro(L4) #local tronco = cylinder{ < 0, 0, 0 >, < 3, 0, 0 >, RAIO_MEMBRO texture { textura } } #local sub = object { pata() } union { object { tronco } object { sub rotate L4 * y translate <3, 0, 0> } } #end #macro pata() #local tronco = cylinder{ < 0, 0, 0 >, < 1, 0, 0 >, RAIO_MEMBRO texture { textura } } tronco #end #macro robo( P1, P2, P3, P4, E11, E12, E13, E14, E21, E22, E23, E24, D11, D12, D13, D14, D21, D22, D23, D24 ) #local raio_tronco = RAIO_MEMBRO * 4; #local tronco = cylinder{ < 0, 0, 0 >, < 6, 0, 0 >, raio_tronco texture { textura } } union { object { tronco } object { pescobaixo(P2, P3, P4) rotate P1 * z translate <6, 0, 0> } object { membro(E13, E14) rotate E11 * y rotate E12 * z translate <1, raio_tronco, 0> } object { membro(D13, D14) rotate D11 * y rotate D12 * z translate <1, -raio_tronco, 0> } object { membro(E23, E24) rotate E21 * y rotate E22 * z translate <5, raio_tronco, 0> } object { membro(D23, D24) rotate D21 * y rotate D22 * z translate <5, -raio_tronco, 0> } } #end #macro cena(tt) #local balanco_pescoco1 = 90 + sin(tt * 2 * pi) * 15; #local balanco_pescoco2 = 15 + sin(tt * 2 * pi) * 10; #local balanco_cabeca = 30 + sin(tt * 4 * pi) * 20; #local cotovelos_1 = 45 + sin(tt * 2 * pi) * 15; #local bracos_1 = 60 + sin(tt * 2 * pi) * 5; #local maos_1 = 90 + sin(tt * 2 * pi) * 45; #local cotovelos_2 = 45 + sin((tt + 0.5) * 2 * pi) * 15; #local bracos_2 = 60 + sin((tt + 0.5) * 2 * pi) * 5; #local maos_2 = 90 + sin((tt + 0.5) * 2 * pi) * 45; #local balanco = 0.1 * cos(tt * 4 * pi); #local altura = 0.2 * sin(tt * 4 * pi); object { robo( 30, balanco_pescoco1, balanco_pescoco2, balanco_cabeca, bracos_1, 90, cotovelos_1, maos_1, bracos_2, 90, cotovelos_2, maos_2, bracos_2, -90, cotovelos_2, maos_2, bracos_1, -90, cotovelos_1, maos_1 ) rotate -180 * y translate } #end object { cena(clock) } #include "camlight.inc" #declare centro_cena = < 0, 0, 3.00 >; #declare raio_cena = 20.0; #declare dir_camera = < 1, 1, 0 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)