// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2010-03-04 15:44:01 by stolfi
// ======================================================================
// CORES E TEXTURAS
background{ color rgb < 0.75, 0.80, 0.85 > }
#declare tx_a =
texture{
pigment{ color rgb < 0.80, 0.80, 1.00 > }
finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
}
#declare tx_b =
texture{
pigment{ color rgb < 0.10, 0.10, 1.00 > }
finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
}
#declare tx_c =
texture{
pigment{ color rgb < 0.80, 0.80, 0.00 > }
finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
}
#declare tx_grade =
texture{
pigment{ color rgb < 0.30, 0.30, 0.10 > }
finish{ diffuse 0.9 ambient 0.1 }
}
// ======================================================================
// DESCRI��O DA CENA
#declare roleta = seed(19);
#declare scale_roda = .2;
// Partes da cena:
#include "eixos.inc"
#include "retalho.inc"
#macro interpola(ta, va, tb, vb, tt)
#local s = (tt - ta) / (tb - ta);
((1 - s) * va + s * vb)
#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 d(p, d1, d2)
#declare p =
;
#end
#macro e(p, e1, e2)
#declare p = ;
#end
#macro f(p, f1, f2)
#declare p = ;
#end
#macro meioaviao(i1, i2)
#local a12=<0,1,2>;
#local a13=<0,2,2>;
#local a14=<0,0,.4>;
#local a22=<-1,1,2>;
#local a23=<-1,2,2>;
#local a24=<-1,0,.4>;
#local a32=<-1,1,0>;
#local a33=<-1,2,0>;
#local a34=<-1,0,0>;
#local a42=<0,1,0>;
#local a43=<0,2,0>;
#local a44=<0,0,0>;
#local b12=<0,-10,3>;
#local b13=<0,-5,3>;
#local b22=<-3,-10,3>;
#local b23=<-3,-5,3>;
#local b32=<-3,-10,0>;
#local b33=<-3,-5,0>;
#local b42=<0,-10,0>;
#local b43=<0,-5,0>;
#local c11=<0,-16,7>;
#local c12=<0,-15,6>;
#local c13=<0,-14,5>;
#local c21=<-.2,-16,7>;
#local c22=<-.5,-15,6>;
#local c23=<-1,-14,5>;
#local c31=<-.2,-16,2>;
#local c32=<-.5,-15,1>;
#local c33=<-1,-14,0>;
#local c41=<0,-16,2>;
#local c42=<0,-15,1>;
#local c43=<0,-14,0>;
#local a11=(a12+b13)/2;
#local a21=(a22+b23)/2;
#local a31=(a32+b33)/2;
#local a41=(a42+b43)/2;
#local b14=a11;
#local b24=a21;
#local b34=a31;
#local b44=a41;
#local b11=(b12+c13)/2;
#local b21=(b22+c23)/2;
#local b31=(b32+c33)/2;
#local b41=(b42+c43)/2;
#local c14=b11;
#local c24=b21;
#local c34=b31;
#local c44=b41;
union{
object{
retalho(
a11,a12,a13,a14,
a21,a22,a23,a24,
a31,a32,a33,a34,
a41,a42,a43,a44,
0.00000000000001,
tx_grade, tx_a)
}
object{
retalho(
b11,b12,b13,b14,
b21,b22,b23,b24,
b31,b32,b33,b34,
b41,b42,b43,b44,
0.00000000000001,
tx_grade, tx_b)
}
object{
retalho(
c11,c12,c13,c14,
c21,c22,c23,c24,
c31,c32,c33,c34,
c41,c42,c43,c44,
0.00000000000001,
tx_grade, tx_c)
}
}
#end
// Aqui est� a cena, finalmente:
#macro aviao()
union {
object{ meioaviao(1, 2) }
object{ meioaviao(1, 2) scale -x}
object{ box{ <0,0,0> <5,1,.5> translate <0,-5,1>} texture {tx_a} }
object{ box{ <0,0,0> <5,1,.5> translate <0,-5,1> scale -x} texture {tx_a} }
}
#end
#declare t0 = 0.00;
#declare t1 = 0.25;
#declare t2 = 0.50;
#declare t3 = 0.75;
#declare t4 = 1.00;
#local p11 = <0.0, -10.0, 0.0>;
#local p12 = <0.0, -5.0, 0.0>;
#local p13 = <0.0, -0.0, 0.0>;
#local p22 = <0.0, 4.0, 3.0>;
#local p23 = <0.0, 6.0, 6.0>;
#local p32 = <2.0, 10.0, 12.0>;
#local p33 = <4.0, 12.0, 15.0>;
#local p42 = <0.0, 16.0, 11.0>;
#local p43 = <-2.0, 18.0, 9.0>;
#local p44 = <-4.0, 20.0, 7.0>;
#local p14 = (p13 + p22) / 2;
#local p21 = p14;
#local p24 = (p23 + p32) / 2;
#local p31 = p24;
#local p34 = (p33 + p42) / 2;
#local p41 = p34;
union {
object{ eixos(3.00) }
union {
aviao()
#if (clock <= t1)
#local res1 = interpola4(t0, p11, p12, p13, p14, t1, clock);
translate res1
#end
#if (clock > t1 & clock <= t2)
#local res2 = interpola4(t1, p21, p22, p23, p24, t2, clock);
translate res2
#local rx2 = interpola(t1, 0, t2, 45, clock);
rotate x * rx2
#end
#if (clock > t2 & clock <= t3)
#local res3 = interpola4(t2, p31, p32, p33, p34, t3, clock);
translate res3
#local rx3 = interpola(t2, 45, t3, 0, clock);
rotate x * rx3
#end
#if (clock > t3)
#local res4 = interpola4(t3, p41, p42, p43, p44, t4, clock);
translate res4
#local rx4 = interpola(t3, 0, t4, -15, clock);
rotate x * rx4
#end
}
}
#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 1.00 >;
#declare raio_cena = 40.0;
#declare dir_camera = < 1.00, .50, 1.00 > ;
#declare dist_camera = 28.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)