In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

VRクリックした方向に固定

VRクリック方向に固定
Get Adobe Flash player
by whaison 12 Jan 2011
  • Forked from whaison's 3D PV3d VR cube
  • Diff: 335
  • Related works: 1
  • Talk

    whaison at 11 Jan 2011 21:39
    あれーなんで更新されないんだー だいぶコードかきかえたのになー
    whaisonTID at 12 Jan 2011 02:54
    みえない力 に犯された asfile
    whaisonTID at 12 Jan 2011 02:54
    たんに 重なり準の問題だといいけど
    whaisonTID at 12 Jan 2011 02:55
    でも一番さいごにaddChildしてるのはTextFieldなんだとおもうんだけどなー
    whaisonTID at 12 Jan 2011 03:10
    なんだか 不思議な 外人から 話しかけられたよ こわいよ。 Rosalia Snellings 「wassup! wonderful picture you got there ...So Come You are Followwing paulocoelho?」 だって。。。
    whaison at 12 Jan 2011 06:00
    なんかFlickerの画像削除したのに このエントリーの画像消えない やっぱ呪われてる。
    ProjectNya at 12 Jan 2011 08:18
    Editで入って、Captureボタンで画像がキャプチャされるはず。
    whaison at 12 Jan 2011 08:40
    >Editで入って、Captureボタンで画像がキャプチャされるはず。 ProjectNya さん色々 お知らせしてくれてどうもありがとうございました。 大変たすかりました。

    Tags

    Embed
// forked from whaison's 3D papervision3d VR cube BitmapFileMaterial Security loadPolicyFile 神社
package 
{
    import flash.display.AVM1Movie;
    
    import flash.display.StageQuality;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.text.TextField;
        import flash.system.Security;
    import org.papervision3d.cameras.CameraType;
    import org.papervision3d.core.math.Plane3D;
    import org.papervision3d.core.proto.LightObject3D;
    import org.papervision3d.events.*;
    import org.papervision3d.lights.PointLight3D;
    import org.papervision3d.materials.*;
    import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
    import org.papervision3d.materials.utils.MaterialsList;
    import org.papervision3d.objects.DisplayObject3D;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.view.*;
    public class Main2 extends BasicView 
    { 
        private var cameraMode:String
        private var buildY:Number;
    
        public var _txt001:TextField
        public var _txt002:TextField
        public var _txt003:TextField
        public var _txt004:TextField
        public var _txt005:TextField
        public var _txt006:TextField
        public var _txt007:TextField
        public var _txt008:TextField
        public var _txt009:TextField
        public var _txt010:TextField
        
        public var scene3D:*
        private var frontM:BitmapFileMaterial;
        private var backM:BitmapFileMaterial;
        private var rightM:BitmapFileMaterial;
        private var leftM:BitmapFileMaterial;
        private var topM:BitmapFileMaterial;
        private var bottomM:BitmapFileMaterial;
        private var alphaM:BitmapFileMaterial;   
        private var testM:BitmapFileMaterial;
        public function Main2() 
        {
            // BasicViewの初期化
            super(0, 0, true, true, CameraType.FREE);
    /////////////////////////////////////////////////////////
            materialLoad()//frontM,backM,rightM,leftM,topM,bottomM のマテリアル準備完了
            ////////////////////////////////////////////////////////////            
            /////////////////////////////////////////////////////////////////////////////////////////
            scene3D = scene///////////////////////////////////////////////////////////////////////////ROOT
            //////////////////////////////////////////////////////////////////////////////////////////////
            // レンダリング
           
            VRinitialize(scene3D);
            // レンダリングを開始します
            startRendering();
           debugersetting()
      }
      public function materialLoad():void 
      {//frontM,backM,rightM,leftM,topM,bottomM
            trace("マテリアル(立方体の面を作成")
            Security.loadPolicyFile("http://farm6.static.flickr.com/crossdomain.xml");
            /*
             * alphaM = new BitmapFileMaterial( "imgs/alphamobetype/alpha100x100_waku.png", true );
            alphaM.interactive = true; // インタラクティブを有効に設定
            alphaM.doubleSided=true //両面テクスチャ
            */
              ///////////////////////////            
           Security.loadPolicyFile("http://farm6.static.flickr.com/crossdomain.xml");
          frontM = new BitmapFileMaterial("http://farm6.static.flickr.com/5243/5347510799_d0616b0611.jpg");//ok
         //frontM = new BitmapFileMaterial( "imgs/f.jpg", true );
            frontM.interactive = true; // インタラクティブを有効に設定
            frontM.doubleSided=true //両面テクスチャ
          backM = new BitmapFileMaterial("http://farm6.static.flickr.com/5123/5347510701_bf7734d994.jpg");//ok
           //backM = new BitmapFileMaterial( "imgs/b.jpg", true );
            backM.interactive = true; // インタラクティブを有効に設定
            backM.doubleSided=true //両面テクスチャ
           rightM = new BitmapFileMaterial("http://farm6.static.flickr.com/5082/5348121034_7ebfcee951.jpg");//ok
          // rightM = new BitmapFileMaterial( "imgs/r.jpg", true );
            rightM.interactive = true; // インタラクティブを有効に設定
            rightM.doubleSided=true //両面テクスチャ
          leftM = new BitmapFileMaterial("http://farm6.static.flickr.com/5249/5348120992_689a331d02.jpg");//ok
          //leftM = new BitmapFileMaterial( "imgs/l.jpg", true );
            leftM.interactive = true; // インタラクティブを有効に設定
            leftM.doubleSided=true //両面テクスチャ
          topM = new BitmapFileMaterial("http://farm6.static.flickr.com/5246/5348121060_6b4577dab8.jpg");//ok
         //topM = new BitmapFileMaterial( "imgs/u.jpg", true );
            topM.interactive = true; // インタラクティブを有効に設定
            topM.doubleSided=true //両面テクスチャ
          bottomM = new BitmapFileMaterial("http://farm6.static.flickr.com/5169/5347510739_58a054988f.jpg");//ok
            //bottomM = new BitmapFileMaterial( "imgs/d.jpg", true );
            bottomM.interactive = true; // インタラクティブを有効に設定
            bottomM.doubleSided=true //両面テクスチャ
        testM=new BitmapFileMaterial("http://farm6.static.flickr.com/5123/5337043628_155be706a9.jpg");//ok

             testM.interactive = true; // インタラクティブを有効に設定
            testM.doubleSided=true //両面テクスチャ
        }

      public function VRinitialize(scene:*):void 
      {
            ////////cube用マテリアルの作成 素材はマテリアル用Functionのロードにまかせる。
            var materials:MaterialsList = new MaterialsList(
            {
                front : frontM,
                back  :backM,
                right : rightM,
                left  : leftM,
                top   : topM,
                bottom: bottomM
            });
          // キューブを作成
            var cube:Cube = new Cube( materials, 5000, 5000, 5000, 8, 8, 8, Cube.ALL, Cube.NONE );
            scene3D.addChild(cube);
            cube.name="cube"
            cube.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, _onOver);
            cube.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, _onOut);
            cube.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, _onClick);
            var plane:Plane=new Plane()
            // マウスのインタラクティブを設定しています
            
            // カメラを原点に配置
            //camera.x = camera.y = camera.z = 0;
            // カメラを原点に配置
            var cameraPositionXYZ:Number = 0
            camera.x = 0
            camera.y=0
            camera.z=-500
            trace("camera.x ="+camera.x)
            trace("camera.y ="+camera.y)
            trace("camera.z ="+camera.z)
            //camera.x = cameraPositionXYZ
            //camera.y = cameraPositionXYZ
            //camera.z = cameraPositionXYZ
            
            // 画質を「低」にして高速化
            stage.quality = StageQuality.LOW;
                        ///////ボタン用板作成
            //-----------------------------------------------------------------------------------planeL            
            var planeW:Number=600
            var planeH:Number=600    
          //  var planeL:Plane = new Plane(leftM, planeW, planeH)
            var planeL:Plane = new Plane(testM, planeW, planeH)
            
            planeL.name="planeL"
            //planeL.rotationY = 90
           // planeL.x = -250
           // planeL.z = -350-20-100;
                // planeL 画面に表示
            scene3D.addChild(planeL);
            planeL.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, _onOver);
            planeL.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, _onOut);
            planeL.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, _onClick);
        //-----------------------------------------------------------------------------------------planeR
        
            var planeR:Plane = new Plane(rightM, planeW, planeH)
            planeR.name="planeR"
            planeR.x=250
            planeR.rotationY = 90;
            planeR.z = -350-20-100;
            // planeR 画面に表示
            scene.addChild(planeR);
            planeR.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, _onOver);
            planeR.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, _onOut);
            planeR.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, _onClick);
            //--------------------------------------------------------------------------------------planeF
            var planeF:Plane = new Plane(frontM, planeW, planeH)
            planeF.name="planeF"
            planeF.z=-200
            // planeF 画面に表示
            scene.addChild(planeF);
            planeF.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, _onOver);
            planeF.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, _onOut);
            planeF.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, _onClick);
            //--------------------------------------------------------------------------------------planeB
            
            var planeB:Plane = new Plane(backM, planeW, planeH)
            planeB.name = "planeB"
            //planeB.scale = 10
            //planeB.z = -100;
            planeB.z = -740;
            //planeB.rotationY = 90;
            //planeB.x = 100;
            planeB.x = 0;
            //planeB.z=-400
            // planeB 画面に表示
            scene.addChild(planeB);
            planeB.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, _onOver);
            planeB.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, _onOut);
            planeB.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, _onClick);
             /**/
            
            addEventListener(Event.ENTER_FRAME, loop);
            addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler);
            // レンダリングを開始します
            //startRendering();
            trace("VRinitialize-■■■■■■■■■■■■■■■■■    END   ■■■■■■■■■■■■■■■■■■■■")
            // キューブを作成
            var cubes:Cube = new Cube( materials, 5000, 5000, 5000, 8, 8, 8, Cube.ALL, Cube.NONE );
            scene3D.addChild(cubes);
            
            // マウスのインタラクティブを設定しています
            //addEventListener(Event.ENTER_FRAME, loop);
           // addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler);
            
            // レンダリングを開始します
            //startRendering();
        }
        private function _onOver(e:InteractiveScene3DEvent):void
        {
            
            _txt007.text="■■■■■ 3D _ OVER イベント発生"+e.currentTarget.name;
        }
        private function _onOut(e:InteractiveScene3DEvent):void
        {
           _txt007.text="■■■■■ 3D _ OUTイベント発生"+e.currentTarget.name;
        }
        private function _onClick(e:InteractiveScene3DEvent):void
        {
            _txt007.text="★★★★OBJECT_★CLICK★ イベント発生"+e.currentTarget.name;
            if(e.currentTarget.name=="planeL"){
             cameraMode="SPOT_LEMON"
            }
            if(e.currentTarget.name=="planeR"){
                cameraMode="SPOT_LIME"
            }
            if(e.currentTarget.name=="planeB"){
                cameraMode="SPOT_GF"
            }
            if(e.currentTarget.name=="planeF"){
                cameraMode="SPOT_DOOR"
            }
            if(e.currentTarget.name=="cube"){
                cameraMode="OTHER"
            }
            _txt003.text="cameraMode="+cameraMode+"に設定しました。"
        }



        //■■■■■■■■■■■■■■■■■■■■■■■■■■■■ VR ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
        
        public function loop(e:Event):void 
        {
            var rotY:Number
            var rotX:Number 
                   // マウスの位置に応じてインタラクティブを設定しています。
                   // カメラの目標となる視線方向を計算
            rotY = 480 * mouseX/(stage.stageWidth);//横回転
           //rotX = 180 * mouseY/(stage.stageHeight) - 90;
          rotX = 180 * mouseY/(stage.stageHeight*10) -15;//縦回転

            // イージングの公式を使ってカメラの値を更新
           camera.rotationY += (rotY - camera.rotationY) * 0.1;
            _txt001.text="camera.rotationY:"+Math.floor(camera.rotationY)+"横回転の値"

            camera.rotationX += (rotX - camera.rotationX) * 0.1;
           _txt002.text="camera.rotationX:"+Math.floor(camera.rotationX)+"縦回転の値"
           
            if(cameraMode=="SPOT_LEMON"){
                //rotY=90
                //camera.rotationY=90  なぜか逆。
                camera.rotationY=270
            }else if(cameraMode=="SPOT_GF"){
                //rotY=180
                camera.rotationY=180
            }else if(cameraMode=="SPOT_LIME"){
                //rotY=270
                //camera.rotationY=270 なぜか逆。
                camera.rotationY=90
            }else if(cameraMode=="SPOT_DOOR"){
                //rotY=270
                camera.rotationY=0
            }else{
                
            }
            
        }
        
        
        // マウスホイールでカメラのズーム値を調整します
        public function wheelHandler(e:MouseEvent):void {
            // ホイールの値をズーム値に加える
            camera.zoom += e.delta / 10;
            // カメラのズーム値は1以下にならないように指定
            if (camera.zoom < 1) {
                camera.zoom = 1;
            }
        }
        
        
     public function debugersetting():void {
                    //trace("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ デバッグ用テキスト■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■START ")
            _txt001=new TextField()
            _txt002=new TextField()
            _txt003=new TextField()
            _txt004=new TextField()
            _txt005=new TextField()
            _txt006=new TextField()
            _txt007=new TextField()
            _txt008=new TextField()
            _txt009=new TextField()
            _txt010=new TextField()
            _txt001.text="_txt001"
            _txt002.text="_txt002"
            _txt003.text="_txt003"
            _txt004.text="_txt004"
            _txt005.text="_txt005"
            _txt006.text="_txt006"
            _txt007.text="_txt007"
            _txt008.text="_txt008"
            _txt009.text="_txt009"
            _txt010.text = "_txt010"
            

            addChild(_txt001)
            addChild(_txt002)
            addChild(_txt003)
            addChild(_txt004)
            addChild(_txt005)
            addChild(_txt006)
            addChild(_txt007)
            addChild(_txt008)
            addChild(_txt009)
            addChild(_txt010)
            
            buildY = 20;
            _txt001.y=buildY
            _txt001.width=300
            buildY = buildY + 10;
            _txt002.y=buildY
            _txt002.width=300
            buildY = buildY + 10;
            _txt003.y=buildY
            buildY = buildY + 10;
            _txt004.y=buildY
            buildY = buildY + 10;
            _txt005.y=buildY
            buildY = buildY + 10;
            _txt006.y=buildY
            buildY = buildY + 10;
            _txt007.y=buildY
            buildY = buildY + 10;
            _txt008.y=buildY
            buildY = buildY + 10;
            _txt009.y=buildY
            buildY = buildY + 10;
            _txt010.y=buildY
            buildY = buildY + 10;
            //    trace("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ デバッグ用テキスト■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■END ")
        }   
            
    }

}