// Last edited on DATE TIME by USER // Processed by remove-cam-lights #include "textures.inc" #include "eixos.inc" #include "colors.inc" #include "retalho.inc" background{ color White } #declare chassi = union{ object{box{<0,0,0>, <4,7,2>} pigment {color Red} } object{box{<0,2,2>, <4,7,3.5>} pigment {color Green}} } #macro interpole(ta, va, tb, vb, tt) #local s = (tt-ta)/(tb-ta); ((1-s)*va+s*vb) #end #macro interpole2(ta, A, tb, B, tt) #local s = (tt-ta)/(tb-ta); ((1-s)*A + s*B) #end #macro interpole4(A, B, C, D, tA, tD, tt) #local AB = interpole2(tA, A, tD, B, tt); #local BC = interpole2(tA, B, tD, C, tt); #local CD = interpole2(tA, C, tD, D, tt); #local ABC = interpole(tA, AB, tD, BC, tt); #local BCD = interpole(tA, BC, tD, CD, tt); #local ABCD = interpole(tA, ABC, tD, BCD, tt); (ABCD) #end #macro projecao(A) (<0, A.y, A.z>) #end #macro deforma(p) #local cons = -0.5+sin(pi*p.y); #if(p.y < 8) #local pd = ; #else #local pd = <0, -3 + p.y*0.5, p.z *(1 + cons)>; #end (p + pd) #end #macro deforma2(p) #local cons = sin(pi*p.y/4); #local pd = ; (p + pd) #end #macro lataria( A01, A02, A11, A12, A21, A22, B11, B12, B21, B22, C11, C12, C21, C22, C31, C32 ) #local A00 = projecao(A01);//<0,0,0.75>; #local A03 = projecao(A02);//<0,0,3>; #local A10 = projecao(A11); //<0,2,0.25>; #local A13 = projecao(A12); //<0,2,3.75>; #local A20 = projecao(A21);//<0,4,0>; #local A23 = projecao(A22);//<0,4,6>; #local B10 = projecao(B11);//<0,8,0>; #local B13 = projecao(B12);//<0,8,6.5>; #local B20 = projecao(B21);//<0,10,0.25>; #local B23 = projecao(B22);//<0,10,5.4>; #local C10 = projecao(C11);//<0,14,0.25>; #local C13 = projecao(C12);//<0,14,4>; #local C20 = projecao(C21);//<0,15,0>; #local C23 = projecao(C22);//<0,15,5.4>; #local C30 = projecao(C31);//<0,16,0>; #local C33 = projecao(C32);//<0,16,5.4>; #local AB0 = (A20+B10)/2; #local AB1 = (A21+B11)/2; #local AB2 = (A22+B12)/2; #local AB3 = (A23+B13)/2; #local BC0 = (B20+C10)/2; #local BC1 = (B21+C11)/2; #local BC2 = (B22+C12)/2; #local BC3 = (B23+C13)/2; #local rg = 0.000001; union{ object{ retalho( A00,A01,A02,A03, A10,A11,A12,A13, A20,A21,A22,A23, AB0,AB1,AB2,AB3, rg, pigment{color Blue}, pigment{ color Red } ) } object{ retalho( AB0,AB1,AB2,AB3, B10,B11,B12,B13, B20,B21,B22,B23, BC0,BC1,BC2,BC3, rg, pigment{color Blue}, pigment{ color Green } ) } object{ retalho( BC0,BC1,BC2,BC3, C10,C11,C12,C13, C20,C21,C22,C23, C30,C31,C32,C33, rg, pigment{color Blue}, pigment{ color Blue } ) } } #end #declare A01 = <3,0,0.75>; #declare A02 = <3,0,3>; #declare A11 = <3,2,0.25>; #declare A12 = <3,2,3.75>; #declare A21 = <3,4,0>; #declare A22 = <3,4,6>; #declare B21 = <3,10,0.25>; #declare B22 = <3,10,5.4>; #declare B11 = <3,8,0>; #declare B12 = <3,8,6.5>; #declare C11 = <3,14,0.25>; #declare C12 = <3,14,4>; #declare C21 = <3,15,0>; #declare C22 = <3,15,5.4>; #declare C31 = <3,16,0>; #declare C32 = <3,16,5.4>; #macro lado() union{ object{ lataria( A01, A02, A11, A12, A21, A22, B11, B12, B21, B22, C11, C12, C21, C22, C31, C32 ) } object{ box { <0,0,0>, <5,5,0.5> } translate <2.5,5,3> pigment{ color Gray } } } #end #macro aviao() union{ object{lado()} object{lado() scale <-1,1,1>} } #end #macro caminho(tt) #declare A = <0, 10, -5>; #declare B = <0, 30, 0>; #declare C = <0, 15, 30>; #declare D = <0, 30, 40>; #declare E = <0, 40, 18>; #declare F = <0, 35, 8>; #declare G = <0, 10, 10>; #declare H = <0, 0, 0>; #declare AB = (A+B)/2; #declare BC = (B+C)/2; #declare DE = (D+E)/2; #declare EF = (E+F)/2; #declare FG = (F+G)/2; #declare GH = (G+H)/2; #declare HA = (H+A)/2; #if (tt >= 0 & clock < 0.25) #local res = interpole4(HA, A, B, BC, 0, 0.25, tt); #end #if (tt >= 0.25 & tt < 0.50) #local res = interpole4(BC, C, D, DE, 0.25, 0.50, tt); #end #if (tt >= 0.50 & tt < 0.75) #local res = interpole4(DE, E, F, FG, 0.50, 0.75, tt); #end #if (tt >= 0.75 & tt <= 1.0) #local res = interpole4(FG, G, H, HA, 0.75, 1.05, tt); #end (res) #end #macro rotacao(tt) #if (tt >= 0 & clock < 0.25) #local res = interpole2(0, -30, 0.25, 120.0, tt); #end #if (tt >= 0.25 & tt < 0.50) #local res = interpole2(0.25, 120.0, 0.50, 0.0, tt); #end #if (tt >= 0.50 & tt < 0.75) #local res = interpole2(0.50, 0.0, 0.75, -170.0, tt); #end #if (tt >= 0.75 & tt <= 1.0) #local res = interpole2(0.75, -170, 1.0, -60.0, tt); #end (res) #end union{ eixos(10) #local pos = caminho(clock); #local rot = rotacao(clock); object{ aviao() scale <1, -1, 1> rotate rot*x translate pos} } #include "camlight.inc" #declare centro_cena = < 0.00, 10.00, 15.00 >; #declare raio_cena = 50.0; #declare dir_camera = < 5, -3, 2 >; #declare dist_camera = 50.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)