▼Papervision3Dメモ▼
モデルの回転


モデルの回転を行うプログラムを作成する。左右キーでZ軸回転、上下キーでX軸回転を行う。



リソースの準備
SWFを配置するフォルダにモデルファイル「fighter.mqo」を配置。



ソースコードの編集
RotateEx.as
package {
    import flash.display.*;
    import flash.events.*;
    import flash.ui.*;
    import flash.utils.*;
    import org.papervision3d.scenes.*;
    import org.papervision3d.objects.*;
    import org.papervision3d.cameras.*;
    import org.papervision3d.materials.*;
    import org.libspark.pv3d.*;

    //モデルの回転
    public class RotateEx extends Sprite {
        private var container:Sprite;         //コンテナ
        private var scene    :Scene3D;        //シーン
        private var camera   :Camera3D;       //カメラ
        private var model    :DisplayObject3D;//モデル

        private var base   :Sprite;//ベース
        private var keyCode:int;   //キーコード

        //コンストラクタ
        public function RotateEx():void {
            //ステージの設定
            stage.quality  ="MEDIUM";
            stage.scaleMode="noScale";
            stage.align    =StageAlign.TOP_LEFT;
            stage.stageFocusRect=false;

            //ベース
            base=new Sprite();
            base.graphics.beginFill(0x6395EE);
            base.graphics.drawRect(0,0,240,240);
            base.graphics.endFill();
            addChild(base);
            keyCode=-1;

            //コンテナの生成
            container=new Sprite();
            base.addChild(container);
            container.x=stage.stageWidth /2;
            container.y=stage.stageHeight/2;

            //シーンの生成
            scene=new Scene3D(container);

            //カメラの生成
            camera=new Camera3D();
            camera.x=100;
            camera.y=100;
            camera.z=100;

            //モデルの読み込み
            model=scene.addChild(new Metasequoia_1_5("fighter.mqo"));
                       
            //定期処理イベントの指定
            addEventListener(Event.ENTER_FRAME,onEnterFrame);

            //イベントリスナーの追加
            base.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
            base.addEventListener(KeyboardEvent.KEY_UP,onKeyUp);
            base.addEventListener(MouseEvent.CLICK,onClick); 
        }

        //定期処理
        private function onEnterFrame(evt:Event):void {
            //回転
            if (keyCode==Keyboard.LEFT) {
                model.rotationZ+=10;
            } else if (keyCode==Keyboard.RIGHT) {
                model.rotationZ-=10;
            } else if (keyCode==Keyboard.UP) {
                model.rotationX+=10;
            } else if (keyCode==Keyboard.DOWN) {
                model.rotationX-=10;
            }
            
            //レンダリング
            scene.renderCamera(camera);
        }

        //キーダウンイベントの処理
        private function onKeyDown(evt:KeyboardEvent):void {
            keyCode=evt.keyCode;
        }

        //キーアップイベントの処理
        private function onKeyUp(evt:KeyboardEvent):void {
            keyCode=-1;
        }

        //マウスクリックイベントの処理
        private function onClick(evt:MouseEvent):void {
            stage.focus=base;
        }
    }
}


ビルド
mxmlc -source-path C:\flash\PV3D_1_5\src -default-size 240 240 -default-frame-rate=30 -default-background-color=0x6395EE RotateEx.as




−戻る−