/** * ... * @author Brad Roodt www.rustpunk.co.za * @version 0.1 * * 1)Create a movie asset material, and set it's animated property to true * * MovieAssetMaterial(linkageID, transparent, ANIMATED, createUnique, precise); * * 2) If you use smooth on your material, then make sure that you set tiled to true, to prevent your machine from * freezing up when your model is at positioned at certain angles. * * 3) Set up an EnterFrame listener to re-render your scene every frame. * * */ package src { import flash.events.Event; import flash.display.Sprite; import flash.events.MouseEvent; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display.Stage; import flash.display.StageQuality; import flash.events.ProgressEvent; import flash.text.TextField; import org.papervision3d.view.BasicView; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.materials.MovieAssetMaterial; import org.papervision3d.objects.parsers.DAE; import org.papervision3d.events.FileLoadEvent; public class AnimateMovieAssetMaterial extends Sprite { var startMouseX:Number; var daeFile:String; var daeMaterialName:String; var view:BasicView; //objects var dae:DAE; var plane:Plane; //simple materials var rotateMat:MovieAssetMaterial; var movieAssetMat:MovieAssetMaterial; public function AnimateMovieAssetMaterial() { daeFile = "collada/radiosity/bunnyBakeFrench2.dae"; daeMaterialName = "radioRender2_jpg"; stage.quality = StageQuality.HIGH; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; view = new BasicView(0,0,true, false, "FREECAMERA3D"); addChild(view); view.camera.zoom = 1; view.camera.focus = 1100; view.camera.y = 120; view.camera.x = 80; view.camera.pitch(9); movieAssetMat = new MovieAssetMaterial("FlashTex2", false, true); movieAssetMat.smooth = true; movieAssetMat.tiled = true; dae = new DAE(); dae.load(daeFile); dae.scale = 165; dae.y=-60; dae.moveRight(80); dae.moveBackward(750); dae.addEventListener(ProgressEvent.PROGRESS, loadProgress); dae.addEventListener(Event.COMPLETE, daeLoadComplete); view.scene.addChild(dae); rotateMat = new MovieAssetMaterial("RotateMat", true); rotateMat.smooth = true; rotateMat.doubleSided = true; plane = new Plane(rotateMat, 480, 480, 4, 4); plane.pitch(90); plane.y = -310; plane.z += 240; plane.x += 75; addEventListener(Event.ENTER_FRAME, animateTexture); } private function daeLoadComplete(e:Event):void { stage.addEventListener(MouseEvent.MOUSE_DOWN, dragging); dae.replaceMaterialByName(movieAssetMat, daeMaterialName); view.singleRender(); removeChild(loadText); } private function animateTexture(e:Event):void { view.singleRender(); } private function loadProgress(e:ProgressEvent):void { loadText.text="Loading Collada: " + Math.floor((e.bytesLoaded / e.bytesTotal)*100) +"%"; } private function dragging(e:MouseEvent):void { view.scene.addChild(plane); startMouseX = mouseX; stage.addEventListener(Event.ENTER_FRAME, dragAmount); } private function dragAmount(e:Event):void { var newMouseX:Number = (mouseX - startMouseX)/2; dae.yaw( -newMouseX * 0.8); plane.roll(newMouseX * 0.8); stage.addEventListener(MouseEvent.MOUSE_UP, noDragging); startMouseX = mouseX; } private function noDragging(e:MouseEvent):void { view.scene.removeChild(plane); stage.removeEventListener(Event.ENTER_FRAME, dragAmount); stage.removeEventListener(MouseEvent.MOUSE_UP, noDragging); } } }