forked from: Gainer+Papervision3D 加速度センサでPlaneをコントロール

by yotsu42keisuke forked from Gainer+Papervision3D 加速度センサでPlaneをコントロール (diff: 1)
Papervision3DでPlaneを生成し、Gainerに加速度センサをつなげて
ブレッドボードを傾けるとPlaneも連動して変形します。
読み込んだ3秒後にセンサの誤差をリセットする。
Gainerモジュールのボタンを押してもリセットできます。
回路の組み方やもっと詳しいコメントはhttp://wonderfl.net/code/eba916c4a25e76949fa69d7cac9495aae2830e2e
にあります。
次はCubeに挑戦してみようかな??
youtubeに動画をUPしてみました。
http://www.youtube.com/watch?v=WV3Sh_xDwbo
なんでここには載せられないんだろ??
不具合だろうな・・・残念。
♥0 | Line 87 | Modified 2010-12-02 01:45:45 | MIT License | (replaced)
play

ActionScript3 source code

/**
 * Copyright yotsu42keisuke ( http://wonderfl.net/user/yotsu42keisuke )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/aDJb
 */

// forked from umi_kappa's Gainer+Papervision3D 加速度センサでPlaneをコントロール
//Papervision3DでPlaneを生成し、Gainerに加速度センサをつなげて
//ブレッドボードを傾けるとPlaneも連動して変形します。
//読み込んだ3秒後にセンサの誤差をリセットする。
//Gainerモジュールのボタンを押してもリセットできます。
//回路の組み方やもっと詳しいコメントはhttp://wonderfl.net/code/eba916c4a25e76949fa69d7cac9495aae2830e2e
//にあります。
//次はCubeに挑戦してみようかな??

//youtubeに動画をUPしてみました。
//http://www.youtube.com/watch?v=WV3Sh_xDwbo
//なんでここには載せられないんだろ??
//不具合だろうな・・・残念。

package  
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.system.*;
    import adobe.utils.ProductManager;
    import flash.text.TextField;
    import flash.utils.*;
    import funnel.Convolution;
    import funnel.Gainer;
    import funnel.Pin;
    import funnel.Scaler;
    import funnel.ui.*;
    import org.papervision3d.materials.*;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.view.*;
    
    [SWF(width = "500",height = "500",backgroundColor = "#fefefe",frameRate = "30")]
    
    public class Main extends BasicView
    {
        
        Security.loadPolicyFile("http://assets.wonderfl.net/crossdomain.xml");//クロスドメイン対策
        
        private var url:String;
        private var material:BitmapFileMaterial;
        private var plane:Plane;
        //回転するPlane用
        
        private var Floor_material:WireframeMaterial;
        private var Floor:Plane;
        //床
        
        private var gio:Gainer;
        private var in_Pin0:Pin;//ain0 X軸方向
        private var in_Pin1:Pin;//ain1 Z軸方向
        private var xx:Number = 0;//X軸調整用
        private var zz:Number = 0;//Z軸調整用
        //Gainer用変数
        
        private var text_x:TextField = new TextField;
        private var text_z:TextField = new TextField;
        
        public function Main() 
        {
            set_3d();//3D設定
            set_gainer();
            
            addChild(text_x);
            addChild(text_z);
            text_z.y = 20;
            //現在何度か表示する
        }
        
        private function set_gainer():void
        {
            
            var intervalId:uint = setTimeout(syoki_set, 3000);
            
            gio = new Gainer;
            
            in_Pin0 = gio.analogInput(0);
            in_Pin0.addFilter(new Scaler(0, 1, -180, 180, Scaler.LINEAR, true));
            in_Pin0.addFilter(new Convolution(Convolution.MOVING_AVERAGE));
            
            in_Pin1 = gio.analogInput(1);
            in_Pin1.addFilter(new Scaler(0, 1, -180, 180, Scaler.LINEAR, true));
            in_Pin1.addFilter(new Convolution(Convolution.MOVING_AVERAGE));
            
            addEventListener(Event.ENTER_FRAME, doEF);
            
            gio.button.addEventListener(ButtonEvent.PRESS, btn_press);
        }
        
        private function btn_press(e:ButtonEvent):void 
        {
            syoki_set();
        }
        
        private function syoki_set():void
        {
            xx = Math.floor(in_Pin0.value);
            zz = Math.floor(in_Pin1.value);
        }
        
        private function doEF(e:Event):void 
        {
            plane.rotationX = Math.floor(in_Pin0.value - xx -90) * -1;
            text_x.text = "rotationX = " + plane.rotationX;
            
            plane.rotationZ = Math.floor(in_Pin1.value - zz) * -1;
            text_z.text = "rotationZ = " + plane.rotationZ;
        }
        
        private function set_3d():void {
            Floor_material = new WireframeMaterial(0x333333);
            Floor = new Plane(Floor_material, 1000, 1000, 10, 10);
            scene.addChild(Floor);
            Floor.rotationX = 90;
            Floor.z = 300;
            Floor.y = -300;
            //床
            
            url = "http://assets.wonderfl.net/images/related_images/3/33/33f8/33f8378a890bab7cca98107b0edfaf2bfbfeac3a";
            material = new BitmapFileMaterial(url, true);
            plane = new Plane(material, 300, 300, 10, 10);
            material.smooth = true;
            material.oneSide = false;
            scene.addChild(plane);
            //回転用Planeを配置
            
            
            camera.z = camera.focus * camera.zoom * -1;
            //ピクセル等倍
            
            startRendering();
            //レンダリング開始
        }
    }
}