package { import flash.display.* import flash.events.*; import org.papervision3d.view.BasicView; import org.papervision3d.core.proto.MaterialObject3D; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.materials.BitmapMaterial; import org.papervision3d.materials.special.CompositeMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Plane; import com.as3dmod.ModifierStack; import com.as3dmod.core.Vector3D; import com.as3dmod.core.VertexProxy; import com.as3dmod.plugins.pv3d.LibraryPv3d; import com.as3dmod.ModifierStack; import com.as3dmod.modifiers.Twist; import com.as3dmod.modifiers.Noise; import com.as3dmod.modifiers.Perlin; import com.as3dmod.modifiers.Bend; import com.as3dmod.modifiers.Bloat; import com.as3dmod.util.Phase; public class As3dmodDemo extends BasicView { private var _plane:Plane; private var _mt:CompositeMaterial; private var _wireMat:WireframeMaterial; private var _modifireStack:ModifierStack; private var _twist:Twist; private var _twistPhase:Phase; private var _bend:Bend; private var _bendPhase:Phase; private var _noise:Noise; private var _perlin:Perlin; private var _perlinPhase:Phase; private var _noisePhase:Phase; private var _bloat:Bloat; public function As3dmodDemo() { //--------------------------------------- // ステージ設定 //--------------------------------------- stage.frameRate = 60; var hit = new Shape(); hit.graphics.beginFill(0xffffff,1); hit.graphics.drawRect(0,0,800,800); addChild(hit); addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler); addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler); super(); //--------------------------------------- // pv3dオブジェクトを設定 //--------------------------------------- // var textureBD = new Texture(0,0); _mt = new CompositeMaterial(); _mt.addMaterial(new ColorMaterial(0xff00ee)); // _mt.addMaterial(new BitmapMaterial(textureBD)); _mt.doubleSided = true; _wireMat = new WireframeMaterial(0x999999); camera.z = -500; _plane = new Plane(_mt,500,500,20,20); scene.addChild(_plane); //--------------------------------------- // modifireを設定 //--------------------------------------- _modifireStack = new ModifierStack(new LibraryPv3d(), _plane); _twist = new Twist(Math.PI/180); _modifireStack.addModifier(_twist); _twistPhase = new Phase(); _bend = new Bend(-0.1,0); // _modifireStack.addModifier(_bend); _bloat = new Bloat(); _modifireStack.addModifier(_bloat); // _noise = new Noise(4); // _modifireStack.addModifier(_noise); _perlin = new Perlin(0.3); _modifireStack.addModifier(_perlin); //変形のベクトル _twist.vector = new Vector3D(0.3,4,0.5); _twist.center = new Vector3D(0.4,0.1,1); //--------------------------------------- // レンダリング開始 //--------------------------------------- startRendering(); } private function mouseDownHandler(e:Event=null):void { _mt.addMaterial(_wireMat); } private function mouseUpHandler(e:Event=null):void { _mt.removeMaterial(_wireMat); } private function progParams():void { //bloat var mX:Number = stage.mouseX - 400; var mY:Number = stage.mouseY - 400; _bloat.x = mX; _bloat.y = -mY; _bloat.z = -200; _bloat.r = 2000; //twist _twistPhase.value += 0.05; _twist.angle = Math.PI / 16 * _twistPhase.phasedValue; } //--------------------------------------- // レンダリング //--------------------------------------- protected override function onRenderTick(e:Event = null):void { progParams(); _modifireStack.apply(); super.onRenderTick(e); } } }