package { import away3d.containers.ObjectContainer3D; import away3d.containers.View3D; import away3d.materials.VideoMaterial; import away3d.primitives.Plane; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.filters.BlurFilter; import flash.media.SoundTransform; import flash.net.NetConnection; import flash.net.NetStream; import flash.system.Security; [SWF(width="500", height="400", frameRate="60", backgroundColor="#FFFFFF")] public class Basic08_videowall extends Sprite { private var mainContainer:ObjectContainer3D; private var container1:ObjectContainer3D; private var container2:ObjectContainer3D; private var container3:ObjectContainer3D; private var plane1bd:BitmapData; private var view:View3D; private var ns1:NetStream; private var ns2:NetStream; private var ns3:NetStream; private var videoSprite1:Sprite; private var videoSprite2:Sprite; private var videoSprite3:Sprite; private var nc2:NetConnection; private var panel3:Plane; private var mat1:VideoMaterial; private var mat2:VideoMaterial; private var mat3:VideoMaterial; public function Basic08_videowall() { Security.loadPolicyFile("http://www.flashgamer.com/crossdomain.xml"); // create a viewport view = new View3D({x:250,y:200}); addChild(view); // Create the main container and put it on stage mainContainer = new ObjectContainer3D({ownCanvas:true}); view.scene.addChild(mainContainer); // Create and attach the child containers container1 = new ObjectContainer3D(); mainContainer.addChild(container1); container2 = new ObjectContainer3D(); mainContainer.addChild(container2); container3 = new ObjectContainer3D(); mainContainer.addChild(container3); // create 3 planes and add them to the container var panel1:Plane = new Plane({width:400,height:300,rotationX:90,bothsides:true,segmentsW:3,segmentsH:3}); var panel2:Plane = new Plane({width:400,height:300,rotationX:90,bothsides:true,segmentsW:3,segmentsH:3}); panel3 = new Plane({width:400,height:300,rotationX:90,bothsides:true,segmentsW:3,segmentsH:3}); // Move the planes away from us panel1.z = 220; panel2.z = 220; panel3.z = 220; // Attach them to the container container1.addChild(panel1); container2.addChild(panel2); container3.addChild(panel3); // Rotate 2 of the containers (easier than rotating the objects themselves) container1.rotationY = 120; container2.rotationY = -120; // create the materials mat1 = new VideoMaterial({file:"video/merry_melodies.flv",loop:true}); mat2 = new VideoMaterial(); mat2.file = "video/bb_minnie_the_moocher.flv"; mat2.loop = true; mat3 = new VideoMaterial({file:"video/tarts_and_flowers.flv",loop:true}); // rtmp won't work (for now) du to Flash Player security // mat3 = new VideoMaterial({file:"bunny.flv",rtmp:"rtmp://edge01.fms.dutchview.nl/botr",loop:true}); // apply materials panel1.material = mat1; panel2.material = mat2; panel3.material = mat3; // render the view this.addEventListener(Event.ENTER_FRAME,update); } private function setVolumeFromAngle(): void { var width:uint = 120/2; var rot:Number = Math.floor(mainContainer.rotationY)%360; var vol:Number = (60-Math.abs( (Math.floor(rot-60)%120 )-60 ))/60; var pan:Number = (Math.floor( 60-(Math.floor(rot-60)%120 ) )/60); if(mat1 && mat2 && mat3 && mat1.netStream && mat2.netStream && mat3.netStream){ // Prevent from executing before the streams are present if(rot < 60 || rot >300 ){ // Sprite1 mat1.netStream.soundTransform = new SoundTransform(0,0); mat2.netStream.soundTransform = new SoundTransform(0,0); mat3.netStream.soundTransform = new SoundTransform(vol,pan*-1); // The "*-1" reverses the left/right channels to compensate for an encoding error in this video } else if(rot >60 && rot < 180){ mat1.netStream.soundTransform = new SoundTransform(0,0); mat2.netStream.soundTransform = new SoundTransform(vol,pan); mat3.netStream.soundTransform = new SoundTransform(0,0); } else if (rot > 180 && rot < 300){ mat1.netStream.soundTransform = new SoundTransform(vol,pan); mat2.netStream.soundTransform = new SoundTransform(0,0); mat3.netStream.soundTransform = new SoundTransform(0,0); } } } private function update(e:Event):void { // Cap rotation to positive numbers for sound to work if(mainContainer.rotationY < 0){mainContainer.rotationY += 360;} // rotate main container based on mouse position var speed:Number = (this.mouseX-250)/25; mainContainer.filters = new Array( new BlurFilter(Math.floor(Math.abs(speed*2)),0)); mainContainer.rotationY += speed; // adjust volume and rotate setVolumeFromAngle(); view.render(); } } }