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;
}
}
}
|