This animation is produced from openSCAD 3d software
and
transformed to a gif file via gimp

the code
//fps = 15
//steps = 100
//$t is a time-constant from 0 to .99 and rounds over
module prism(l, w, h){
polyhedron(
points=[[0,0,0], [l,0,0], [l,w,0], [0,w,0], [0+1,w,h], [l-1,w,h]],
faces=[[0,1,2,3],[5,4,3,2],[0,4,5,1],[0,3,4],[5,2,1]]
);
}
//preview of the data at hand
echo($t);
echo($vpr);
$vpr = [55+sin(90*$t),0,55+$t*360];//view point angel controller
echo($vpt);
$vpt = [20,0,0];//viepoint offeset (traslate)
//
rotate([0+$t*60*0,20,-10])translate([-5,-10,]){
translate([5,0,0]){
color("white")translate([0,3,2])rotate([90,$t*1000,90])cylinder(h=2,d=10,center=true);
color("white")translate([0,22,2])rotate([90,$t*720,80])cylinder(h=2,d=10,center=true);
}
color("blue",0.5)cube([10,25,5]);
color("red",1)translate([0,0,5-0.0999])prism(10,10,5);
color("red",1)translate([0,25,5-0.0999])prism(10,-10,5);
CubePoints = [
[ 0, 0, 0 ], //0
[ 10, 0, 0 ], //1
[ 10, 5, 0 ], //2
[ 0, 5, 0 ], //3
[0+1, 0, 5-.0999 ], //4
[10-1, 0, 5-.0999 ], //5
[10-1, 5, 5-.0999 ], //6
[0+1, 5, 5-.0999 ] //7
];
CubeFaces = [
[0,1,2,3], // bottom
[4,5,1,0], // front
[7,6,5,4], // top
[5,6,2,1], // right
[6,7,3,2], // back
[7,4,0,3] // left
];
color("red",1)translate([0,10,5])polyhedron( CubePoints, CubeFaces );
}