// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2010-03-04 15:44:01 by stolfi // ====================================================================== // CORES E TEXTURAS #include "textures.inc" #include "eixos.inc" #include "colors.inc" #include "retalho.inc" background{ color Turquoise } // ====================================================================== // DESCRIÇÃO DA CENA // Partes da cena: #declare chassi = union{ object{box{<0,0,0>, <4,7,2>} pigment {color Yellow} } 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 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>; // segundo retalho #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>; //terceiro retalho #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>; // pontos dos meios #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.0; 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 Yellow } ) } //retalho 2 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 } ) } //retalho 2 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 // montando o aviao //PONTOS #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 lataria_deformada(d1, d2) #local Ad01 = deforma(A01)*d1 + deforma2(A01)*d2; #local Ad02 = deforma(A02)*d1 + deforma2(A02)*d2; #local Ad11 = deforma(A11)*d1 + deforma2(A11)*d2; #local Ad12 = deforma(A12)*d1 + deforma2(A12)*d2; #local Ad21 = deforma(A21)*d1 + deforma2(A21)*d2; #local Ad22 = deforma(A22)*d1 + deforma2(A22)*d2; #local Cd11 = deforma(C11)*d1 + deforma2(C11)*d2; #local Cd12 = deforma(C12)*d1 + deforma2(C12)*d2; #local Cd21 = deforma(C21)*d1 + deforma2(C21)*d2; #local Cd22 = deforma(C22)*d1 + deforma2(C22)*d2; #local Cd31 = deforma(C31)*d1 + deforma2(C31)*d2; #local Cd32 = deforma(C32)*d1 + deforma2(C32)*d2; lataria( Ad01, Ad02, Ad11, Ad12, Ad21, Ad22, B11, B12, B21, B22, Cd11, Cd12, Cd21, Cd22, Cd31, Cd32 ) #end #macro lado(d1,d2) union{ object{ lataria_deformada(d1,d2) } //asa object{ box { <0,0,0>, <5,5,0.5> } translate <2.5,5,3> pigment{ color Gray } } } #end #macro interp2(tA, A, tB, B, tt) #local r = (tt-tA)/(tB-tA); ((1-r) * A + r*B) #end #macro interp4(tA, A, B, C, D, tD, tt) #local AB = interp2(tA, A, tD, B, tt); #local BC = interp2(tA, B, tD, C, tt); #local CD = interp2(tA, C, tD, D, tt); #local ABC = interp2(tA, AB, tD, BC, tt); #local BCD = interp2(tA, BC, tD, CD, tt); #local ABCD = interp2(tA, ABC, tD, BCD, tt); (ABCD) #end #macro aviao(d1, d2) union{ object{lado(d1,d2)} object{lado(d1,d2) scale <-1,1,1>} } #end #macro quadro(tt) #local t0 = 0; #local t1 = 0.25; #local t2 = 0.50; #local t3 = 0.75; #local t4 = 1; #local tr0 = 0; #local tr1 = 0.20; #local tr2 = 0.30; #local tr3 = 0.70; #local tr4 = 0.80; #local p12 = <0, 20, 2>; #local p13 = <0, 20, 10>; #local p22 = <0, -20, 12>; #local p23 = <0, -20, 20>; #local p32 = <0, 20, 20>; #local p33 = <0, 20, 12>; #local p42 = <0, -20, 10>; #local p43 = <0, -20, 2>; #local p14 = (p13+p22)/2; #local p24 = (p23+p32)/2; #local p34 = (p33+p42)/2; #local p44 = (p43+p12)/2; #declare px = p44; #declare aoa = 0; #declare rol = 0; #if(tt >= t0 & tt < t1) #declare px = interp4(t0, p44, p12, p13, p14, t1, tt); #declare aoa = interp4(t0, 0, 45, 135, 180, t1, tt); #declare rol = interp4(t0, 0, 5, 20, 180, t1, tt); #end #if(tt >= t1 & tt < t2) #declare px = interp4(t1, p14, p22, p23, p24, t2, tt); #declare aoa = interp4(t1, 180, 225, 315, 360, t2, tt); #declare rol = interp4(t1, 180, 180, 180, 180, t2, tt); #end #if(tt >= t2 & tt < t3) #declare px = interp4(t2, p24, p32, p33, p34, t3, tt); #declare aoa = interp4(t2, 360, 405, 495, 540, t3, tt); #declare rol = interp4(t2, 180, 180, 180, 180, t3, tt); #end #if(tt >= t3 & tt <= t4) #declare px = interp4(t3, p34, p42, p43, p44, t4, tt); #declare aoa = interp4(t3, 540, 585, 675, 720, t4, tt); #declare rol = interp4(t3, 180, 20, 5, 0, t4, tt); #end //sphere{px, 0.5 texture{Cork}} object{ aviao(1, 0) rotate < -aoa, rol, 180> scale <0.3, 0.3, 0.3> translate px} object{ aviao(1, 0) rotate < aoa, -rol, 180> scale <0.3, 0.3, 0.3> translate px*<1,1,-1>} #end // Aqui está a cena, finalmente: quadro(clock) #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 5.00 >; #declare raio_cena = 30.0; #declare dir_camera = < 5, -3, 2 >; #declare dist_camera = 1000.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)