// Exemplo de arquivo de descricao de ANIMAÇÃO para POV-ray // Last edited on 2009-09-24 15:40:22 by stolfi #declare tx_plastico = texture{ pigment{ color rgb < 1.00, 1.00, 0.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #include "retalho.inc" #include "eixos.inc" #local p11=<0,0,-1>; #local p21=<0,0,-1>; #local p31=<0,0,-1>; #local p41=<0,00,-1>; #local p12=<0,3,0>; #local p22=<1.3,3,-1>; #local p32=<1.3,3,-2>; #local p42= <0,3,-3>; #local p13=<0,4,0>; #local p23=<1.6,4,-1>; #local p33=<1.6,4,-2>; #local p43=<0,4,-3>; #local r12=<0,6,0>; #local r22=<2,6,-1>; #local r32=<2,6,-2>; #local r42= <0,6,-3>; #local r13=<0,8,0>; #local r23=<2,8,-1>; #local r33=<2,8,-2>; #local r43=<0,8,-3>; #local r14=<0,12,0>; #local r24=<2,12,-1>; #local r34=<2,12,-2>; #local r44=<0,12,-3>; #local s12=<0,14,-0.5>; #local s22=<1.7,14,-1>; #local s32=<1.7,14,-2>; #local s42= <0,14,-3>; #local s13=<0,15,-1>; #local s23=<1.3,15,-1.5>; #local s33=<1.3,15,-2>; #local s43=<0,15,-3>; #local s14=<0,16,-2>; #local s24=<0,16,-2>; #local s34=<0,16,-2>; #local s44=<0,16,-2>; #macro faz_aviao(p11,p21,p31,p41,p12,p22,p32,p42,p13,p23,p33,p43,r12,r22,r32,r42,r13,r23,r33,r43,r14,r24,r34,r44,s12,s22,s32,s42,s13,s23,s33,s43,s14,s24,s34,s44) #local op11=<-p11.x,p11.y,p11.z>; #local op21=<-p21.x,p21.y,p21.z>; #local op31=<-p31.x,p31.y,p31.z>; #local op41=<-p41.x,p41.y,p41.z>; #local op12=<-p12.x,p12.y,p12.z>; #local op22=<-p22.x,p22.y,p22.z>; #local op32=<-p32.x,p32.y,p32.z>; #local op42=<-p42.x,p42.y,p42.z>; #local op13=<-p13.x,p13.y,p13.z>; #local op23=<-p23.x,p23.y,p23.z>; #local op33=<-p33.x,p33.y,p33.z>; #local op43=<-p43.x,p43.y,p43.z>; #local or12=<-r12.x,r12.y,r12.z>; #local or22=<-r22.x,r22.y,r22.z>; #local or32=<-r32.x,r32.y,r32.z>; #local or42=<-r42.x,r42.y,r42.z>; #local or13=<-r13.x,r13.y,r13.z>; #local or23=<-r23.x,r23.y,r23.z>; #local or33=<-r33.x,r33.y,r33.z>; #local or43=<-r43.x,r43.y,r43.z>; #local or14=<-r14.x,r14.y,r14.z>; #local or24=<-r24.x,r24.y,r24.z>; #local or34=<-r34.x,r34.y,r34.z>; #local or44=<-r44.x,r44.y,r44.z>; #local os12=<-s12.x,s12.y,s12.z>; #local os22=<-s22.x,s22.y,s22.z>; #local os32=<-s32.x,s32.y,s32.z>; #local os42=<-s42.x,s42.y,s42.z>; #local os13=<-s13.x,s13.y,s13.z>; #local os23=<-s23.x,s23.y,s23.z>; #local os33=<-s33.x,s33.y,s33.z>; #local os43=<-s43.x,s43.y,s43.z>; #local os14=<-s14.x,s14.y,s14.z>; #local os24=<-s24.x,s24.y,s24.z>; #local os34=<-s34.x,s34.y,s34.z>; #local os44=<-s44.x,s44.y,s44.z>; #local p14=(p13+r12)/2; #local p24=(p23+r22)/2; #local p34=(p33+r32)/2; #local p44=(p43+r42)/2; #local r11=p14; #local r21=p24; #local r31=p34; #local r41=p44; #local r14=(r13+s12)/2; #local r24=(r23+s22)/2; #local r34=(r33+s32)/2; #local r44=(r43+s42)/2; #local s11=r14; #local s21=r24; #local s31=r34; #local s41=r44; #local op14=(op13+or12)/2; #local op24=(op23+or22)/2; #local op34=(op33+or32)/2; #local op44=(op43+or42)/2; #local or11=op14; #local or21=op24; #local or31=op34; #local or41=op44; #local or14=(or13+os12)/2; #local or24=(or23+os22)/2; #local or34=(or33+os32)/2; #local or44=(or43+os42)/2; #local os11=or14; #local os21=or24; #local os31=or34; #local os41=or44; #local p11=(p21+op21)/2; #local p12=(p22+op22)/2; #local p13=(p23+op23)/2; #local p14=(p24+op24)/2; #local op11=p11; #local op12=p12; #local op13=p13; #local op14=p14; #local r11=(r21+or21)/2; #local r12=(r22+or22)/2; #local r13=(r23+or23)/2; #local r14=(r24+or24)/2; #local or11=r11; #local or12=r12; #local or13=r13; #local or14=r14; #local s11=(s21+os21)/2; #local s12=(s22+os22)/2; #local s13=(s23+os23)/2; #local s14=(s24+os24)/2; #local os11=s11; #local os12=s12; #local os13=s13; #local os14=s14; #local p41=(p31+op31)/2; #local p42=(p32+op32)/2; #local p43=(p33+op33)/2; #local p44=(p34+op34)/2; #local op41=p41; #local op42=p42; #local op43=p43; #local op44=p44; #local r41=(r31+or31)/2; #local r42=(r32+or32)/2; #local r43=(r33+or33)/2; #local r44=(r34+or34)/2; #local s41=(s31+os31)/2; #local s42=(s32+os32)/2; #local s43=(s33+os33)/2; #local s44=(s34+os34)/2; #local os41=s41; #local os42=s42; #local os43=s43; #local os44=s44; #local or41=r41; #local or42=r42; #local or43=r43; #local or44=r44; union{ retalho (p11,p12,p13,p14,p21,p22,p23,p24,p31,p32,p33,p34,p41,p42,p43,p44, 0.01, texture{tx_plastico},texture{tx_plastico}) retalho (r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,r44, 0.01, texture{tx_plastico},texture{tx_plastico}) retalho (s11,s12,s13,s14,s21,s22,s23,s24,s31,s32,s33,s34,s41,s42,s43,s44, 0.01, texture{tx_plastico},texture{tx_plastico}) //LADO OPOSTO retalho (op11,op12,op13,op14,op21,op22,op23,op24,op31,op32,op33,op34,op41,op42,op43,op44, 0.01, texture{tx_plastico},texture{tx_plastico}) retalho (or11,or12,or13,or14,or21,or22,or23,or24,or31,or32,or33,or34,or41,or42,or43,or44, 0.01, texture{tx_plastico},texture{tx_plastico}) retalho (os11,os12,os13,os14,os21,os22,os23,os24,os31,os32,os33,os34,os41,os42,os43,os44, 0.01, texture{tx_plastico},texture{tx_plastico}) } #end #macro interpola2(tA, A, tB,B, tt) #local r = (tt-tA)/(tB-tA); (r*B+(1-r)*A) #end #macro interpola4(tA, A,B,C,D, tD, tt) #local AB = interpola2(tA,A,tD,B,tt); #local BC = interpola2(tA,B,tD,C,tt); #local CD = interpola2(tA,C,tD,D,tt); #local ABC = interpola2(tA,AB,tD,BC,tt); #local BCD = interpola2(tA,BC,tD,CD,tt); #local ABCD = interpola2(tA,ABC,tD,BCD,tt); ABCD #end #macro faz_rodar(tt) // Gera o quadro do filme (cena, luzes e câmera) // para o instante {tt} -- um número real entre 0 e 1. // DESCRIÇÃO DA CENA background{ color rgb < 0.75, 0.80, 0.85 > } #local B = <0,0,10>; #local C = <0,-10,10>; #local E = <0,-15,0>; #local D = (C+E)/2; #local F = <0,-20,16>; #local H = <0,-30,0>; #local G = (H+F)/2; #local I = <0,-40,15>; #local K = <0,-50,5>; #local J = (K+I)/2; #local L = <0,-35,0>; #local N = <0,-20,-10>; #local M = (L+N)/2; #local O = <0,-10,-5>; #local A = (B+O)/2; #local rB = 20; #local rC = -20; #local rE = 0; #local rD = (rC+rE)/2; #local rF = 20; #local rH = -10; #local rG = (rH+rF)/2; #local rI = 20; #local rK = -25; #local rJ = (rK+rI)/2; #local rL = -160; #local rN = -180; #local rM = (rL+rN)/2; #local rO = -200; #local rA = (rB+rO)/2; #if (tt<0.25) #local trans = interpola4(0, A,B,C,D,0.24,tt); #local rot = interpola4(0, rA,rB,rC,rD,0.24,tt); #end #if ((tt<0.5) & (tt>=0.25)) #local trans = interpola4(0.25, E,F,G,H,0.49,tt); #local rot = interpola4(0.25, rE,rF,rG,rH,0.49,tt); #end #if ((tt<0.75) & (tt>=0.5)) #local trans = interpola4(0.5, I,J,K,L,0.74,tt); #local rot = interpola4(0.5, rI,rJ,rK,rL,0.74,tt); #end #if ((tt>=0.75)) #local trans = interpola4(0.75, M,N,O,A,1,tt); #local rot = interpola4(0.75, rM,rN,rO,rA,1,tt); #end union { object { faz_aviao(p11,p21,p31,p41,p12,p22,p32,p42,p13,p23,p33,p43,r12,r22,r32,r42,r13,r23,r33,r43,r14,r24,r34,r44,s12,s22,s32,s42,s13,s23,s33,s43,s14,s24,s34,s44) translate trans rotate rot*x} } #end // gera o quadro correspondente ao instante dado {clock}: faz_rodar(clock) #include "camlight.inc" #declare centro_cena = < 0.00, -10.00, -2>; #declare raio_cena = 40; #declare dir_camera = < -10.00, 10.00, 5.00 >; #declare dist_camera = 50.0; #declare intens_luz = 0.97; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)