This was my first attempt at using the AS3DMod Library so you can see where the previously posted example came from.
I’ve also added gouraud shading to make it a little more interesting.
Click image to open:
Here is the source:
package { import com.as3dmod.ModifierStack; import com.as3dmod.modifiers.Perlin; import com.as3dmod.plugins.pv3d.LibraryPv3d; import flash.display.Bitmap; import flash.display.Loader; import flash.display.StageAlign; import flash.display.StageQuality; import flash.display.StageScaleMode; import flash.events.Event; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.BitmapMaterial; import org.papervision3d.materials.shaders.GouraudShader; import org.papervision3d.materials.shaders.ShadedMaterial; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.view.BasicView; [SWF(width="600", height="400", backgroundColor="#000000", frameRate="31")] public class PublicFlag extends BasicView { [Embed(source="assets/flagLogo.gif")] public var Flag:Class; private var _plane:Plane; private var _mod:ModifierStack; private var _perlin:Perlin; private var _xPhaseVal:Number = 0; private var _yPhaseVal:Number = 0; private var _targXPhaseVal:Number = 0; private var _targYPhaseVal:Number = 0; private var _light:PointLight3D; public function PublicFlag() { super(stage.stageWidth, stage.stageHeight); init(); } private function init():void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.stageFocusRect = false; _light = new PointLight3D(); _light.z = -100; _light.y = -100; var logo:Bitmap = new Flag() as Bitmap; var shader:GouraudShader = new GouraudShader( _light , 0xffffff , 0x555555 , 10); var mat:ShadedMaterial = new ShadedMaterial( new BitmapMaterial( logo.bitmapData) , shader); mat.doubleSided = true; _plane = new Plane( mat , logo.width , logo.height , 12, 8); _plane.useOwnContainer = true; camera.fov=34; scene.addChild( _plane ); modify(); startRendering(); } private function modify():void { _mod = new ModifierStack( new LibraryPv3d() , _plane ); _perlin = new Perlin(3); _perlin.setFalloff( 0 , 1 ); _mod.addModifier( _perlin ); } override protected function onRenderTick(event:Event=null):void { _xPhaseVal = (stage.mouseX - stage.stageWidth/2)/stage.stageWidth; _plane.rotationY += ( (160*_xPhaseVal)-_plane.rotationY)/10; _yPhaseVal = (stage.mouseY - stage.stageHeight/2)/stage.stageHeight; _plane.rotationX += ( (100 * _yPhaseVal) - _plane.rotationX)/10; _mod.apply(); super.onRenderTick(event); } } }
