// Last edited on 2005-01-05 22:57:54 by stolfi // Processed by remove-cam-lights #include "colors.inc" background{ color rgb < 0.75, 0.80, 0.85 > } #declare raio = 2.000; #declare tinta_cinza = texture { pigment { color rgb < 0.85, 0.85, 0.85 > } finish { diffuse 0.8 specular 0.2 roughness 0.05 ambient 0.1 } } #declare Glass = texture { pigment { White filter 1 } finish { diffuse 0.25 specular 0.2 roughness 0.001 ambient 0.1 reflection 0.25 } } #declare DarkGlass = texture { pigment { White filter 0.5 } finish { diffuse 0.25 specular 0.2 roughness 0.001 ambient 0.1 reflection 0.25 } } #declare ferro = texture { pigment { color rgbf < 0.40, 0.40, 0.40, 0.1 > } finish { diffuse 0.8 specular 0.2 roughness 0.005 ambient 0.1 } } #declare madeira = texture { pigment { color Brown } finish { diffuse 0.25 specular 0.5 roughness 0.005 ambient 0.1 } } #declare curva_trilho_int = difference { torus { 5, 0.1 rotate x*-90 texture{ ferro } } box { <-6,-6,-6>, <0,6,6> texture{ ferro } } } #declare trilho_int = union { object { curva_trilho_int translate 5*x } object { curva_trilho_int rotate 180*z translate -5*x } cylinder { <-5, 5, 0>, < 5, 5, 0>, 0.1 open texture { ferro } } cylinder { <-5, -5, 0>, < 5, -5, 0>, 0.1 open texture { ferro } } } #declare curva_trilho_ext = difference { torus { 6, 0.1 rotate x*-90 texture{ ferro } } box { <-7,-7,-7>, < 0, 7, 7> texture{ ferro } } } #declare trilho_ext = union { object { curva_trilho_ext translate 5*x } object { curva_trilho_ext rotate 180*z translate -5*x } cylinder { <-5, 6, 0>, < 5, 6, 0>, 0.1 open texture { ferro } } cylinder { <-5, -6, 0>, < 5, -6, 0>, 0.1 open texture { ferro } } } #declare placa_madeira = box { <-0.15, -6, -0.03>, < 0.15, -5, 0.03> texture { madeira } } #declare placas = union { #declare j=-5; #while (j <= 5) object { placa_madeira translate j*x } object { placa_madeira translate j*x translate 11*y } #declare j = j + 1; #end #declare j=0; #while (j <= 180) object { placa_madeira rotate j*z translate 5*x } object { placa_madeira rotate -j*z translate -5*x } #declare j = j + 18; #end } #declare trilho = union { object { trilho_int } object { trilho_ext } object { placas } } #declare roda = union { torus { 0.3, 0.08 texture{ ferro } } #declare i = 0; #while (i<360) cylinder { <-0.3, 0, 0>, < 0.3, 0, 0>, 0.04 texture { madeira } rotate i*y } #declare i = i + 45; #end } #declare gerador = seed(696969); #declare vagao1 = union { box { <-0.5, 0.15, 0>, <2.2, 1.15, 1> texture { pigment { color rgb } finish { diffuse 0.8 specular 0.2 roughness 0.005 ambient 0.1 } } } #declare i = 0; #while (i<2.2) object { roda translate i*x } object { roda translate i*x translate 1.5*y } #declare i = i+0.8; #end } #declare barra = cylinder { <-0.5, 0.65, 0.2>, <-2.5, 0.65, 0.2>, 0.1 texture { ferro } } #declare vagao2 = union { box { <-0.5, 0.15, 0>, <2.2, 1.15, 1> texture { pigment { color rgb } finish { diffuse 0.8 specular 0.2 roughness 0.005 ambient 0.1 } } } #declare i = 0; #while (i<2.2) object { roda translate i*x } object { roda translate i*x translate 1.5*y } #declare i = i+0.8; #end } #declare locomotiva = union { box { <-0.5, 0.15, 0>, <1.1, 1.15, 1> texture { pigment { color rgb } finish { diffuse 0.8 specular 0.2 roughness 0.005 ambient 0.1 } } } difference { cylinder { <1.0, 0.65, 0>, <2.1, 0.65, 0>, 0.5 texture { pigment { color rgb } finish { diffuse 0.8 specular 0.2 roughness 0.005 ambient 0.1 } } } box { <1, 0, 0>, <2, 2, -2> } } cylinder { <1.6, 0.65, 0.5>, <1.6, 0.65, 1.5>, 0.15 } #declare i = 0; #while (i<1.9) object { roda translate i*x } object { roda translate i*x translate 1.5*y } #declare i = i+0.8; #end #if (j>-5) cylinder { <-0.5, 0.65, 0.2>, <-2.5, 0.65, 0.2>, 0.1 texture { ferro } } #end } #declare trem = union { object { locomotiva translate 0.38*z #switch (clock) #range (0.0000, 0.2001) translate -6*y translate 125*clock*clock*x #break #range (0.2001, 0.3900) rotate 10*x rotate (clock-0.2)*10*90*z translate (clock-0.3)*10*7.8*y translate (11 - abs(clock-0.3)*10*3.7)*x #break #range (0.4000, 0.6001) rotate 180*z translate 6*y translate (0.5 - clock)*10*5*x #break #range (0.6001, 0.7900) rotate (180 + (clock-0.6)*10*90)*z translate -(clock-0.7)*10*7.8*y translate -(11 - abs(clock-0.7)*10*3.7)*x #break #range (0.8000, 1.0000) translate -6*y translate -(clock-1)*(clock-1)*125*x #break #end } object { vagao1 translate 0.38*z #switch (clock) #range (0.0000, 0.2500) translate -6*y translate (125*clock*clock - 3.0)*x #break #range (0.2501, 0.4400) rotate 10*x rotate (clock-0.25)*10*90*z translate (clock-0.35)*10*7.8*y translate (11 - abs(clock-0.35)*10*3.7)*x #break #range (0.4401, 0.6500) rotate 180*z translate 6*y translate ((0.55 - clock)*10*5 + 0.5)*x #break #range (0.6501, 0.8400) rotate (180 + (clock-0.65)*10*90)*z translate -(clock-0.75)*10*7.8*y translate -(11 - abs(clock-0.75)*10*3.7)*x #break #range (0.8401, 1.0000) translate -6*y translate -((clock-1)*(clock-1)*125 + 3)*x #break #end } object { barra translate 0.38*z #switch (clock) #range (0.0000, 0.2500) translate -6*y translate (125*clock*clock - 3.0)*x #break #range (0.2501, 0.4400) rotate 10*x rotate (clock-0.25)*10*90*z translate (clock-0.35)*10*7.8*y translate (11 - abs(clock-0.35)*10*3.7)*x #break #range (0.4401, 0.6500) rotate 180*z translate 6*y translate ((0.55 - clock)*10*5 + 0.5)*x #break #range (0.6501, 0.8400) rotate (180 + (clock-0.65)*10*90)*z translate -(clock-0.75)*10*7.8*y translate -(11 - abs(clock-0.75)*10*3.7)*x #break #range (0.8401, 0.8900) translate 3*x rotate (180 + (clock-0.7)*10*90)*z translate -(clock-0.8)*10*7.8*y translate -(11 - abs(clock-0.8)*10*3.7)*x #break #range (0.8901, 1.0000) translate -6*y translate -((clock-1)*(clock-1)*125 + 3)*x #break #end } object { vagao2 translate 0.38*z #switch (clock) #range (0.0000, 0.3001) translate -6*y translate (125*clock*clock - 3 - 3)*x #break #range (0.3001, 0.4900) rotate 10*x rotate (clock-0.3)*10*90*z translate (clock-0.4)*10*7.8*y translate (11 - abs(clock-0.4)*10*3.7)*x #break #range (0.4901, 0.7000) rotate 180*z translate 6*y translate ((0.6 - clock)*10*5 + 1.0 )*x #break #range (0.7001, 0.8900) rotate (180 + (clock-0.7)*10*90)*z translate -(clock-0.8)*10*7.8*y translate -(11 - abs(clock-0.8)*10*3.7)*x #break #range (0.8901, 1.0000) translate -6*y translate -((clock-1)*(clock-1)*125 + 3 + 3)*x #break #end } } union { object{ trilho } object{ trem } } #include "camlight.inc" camlight(<0,0,5>,<4,-25,7>,1.00,z,1.0)