トップ > Papervision3D 2.0 > Papervision3D 2.0 オブジェクトの入れ子

Papervision3D 2.0 オブジェクトの入れ子

PV3D で複数のオブジェクトを扱う場合、個別に動かすのではなく、一括で制御したいケースはあるはず。極端な話 100 個のオブジェクトを個別に動かすのは非常に面倒だからねぇ…。

で、たまたま発見したのが、DisplayObject3D クラス。これで空の 3D オブジェクトが作れるようだ。

このサイトをご覧頂くには最新の Flash Player Plug-in をお使いのブラウザにインストールする必要があります。
Flash Player Plug-in はこちらからダウンロードする事が出来ます(無料)。

obj3D = new DisplayObject3D();
scene.addChild(obj3D);

↑こんな感じで空の 3D オブジェクトを生成してシーンに配置。


obj3D.addChild(cube1);
obj3D.addChild(cube2);

↑そして、今作った 3D オブジェクトに他のオブジェクトを配置する。

これで、
==============================
obj3D
├ cube1
└ cube2
==============================
という構成になる。


obj3D.rotationX += mousePos.y / 20;
obj3D.rotationY += mousePos.x / 20;

↑あとは、enterFrame イベントで、obj3D の座標を変化させると中に配置してある cube1, cube2 をまとめて動かすことができる。

全ソースは下記。


package
{
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	import caurina.transitions.Tweener;
	import caurina.transitions.properties.ColorShortcuts;
	import caurina.transitions.properties.DisplayShortcuts;
	//Papervision3D 2.0.883
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.view.Viewport3D;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.special.CompositeMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	public class Main extends Sprite
	{
		public var main:MovieClip;
		private var scene:Scene3D;
		private var camera:Camera3D;
		private var viewport:Viewport3D;
		private var renderer:BasicRenderEngine;
		private var cube1:Cube;
		private var cube2:Cube;
		private var obj3D:DisplayObject3D;
		/*============================================================
		コンストラクタ
		============================================================*/
		public function Main()
		{
			init();
			init3D();
		}
		/*============================================================
		初期設定
		============================================================*/
		public function init():void
		{
			//ステージ
			stage.showDefaultContextMenu = false;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
		}
		/*============================================================
		3D処理
		============================================================*/
		public function init3D():void
		{
			scene = new Scene3D();//シーン
			camera = new Camera3D();//カメラ
			renderer = new BasicRenderEngine();//レンダラー
			viewport = new Viewport3D(0, 0, true);//ビューポート
			viewport.opaqueBackground = 0x000000;//背景色
			addChild(viewport);
			
			//オブジェクト1
			var compMaterial1:CompositeMaterial = new CompositeMaterial(); //コンポジットマテリアル
			compMaterial1.addMaterial(new ColorMaterial(0xFF6600));
			compMaterial1.addMaterial(new WireframeMaterial(0xFFFFFF));
			var materials1:MaterialsList = new MaterialsList
			({
				all : compMaterial1
			});
			cube1 = new Cube(materials1, 300, 200, 100);//Cube生成
			cube1.x = 250;
			
			//オブジェクト2
			var compMaterial2:CompositeMaterial = new CompositeMaterial(); //コンポジットマテリアル
			compMaterial2.addMaterial(new ColorMaterial(0x0066FF));
			compMaterial2.addMaterial(new WireframeMaterial(0xFFFFFF));
			var materials2:MaterialsList = new MaterialsList
			({
				all : compMaterial2
			});
			cube2 = new Cube(materials2, 300, 200, 100);//Cube生成
			cube2.x = -250;
			
			//obj3D生成
			obj3D = new DisplayObject3D();
			scene.addChild(obj3D);
			obj3D.addChild(cube1);
			obj3D.addChild(cube2);
			
			function onEnterFrame(event:Event):void
			{
				var mousePos:Point = new Point(stage.mouseX, stage.mouseY);//マウスカーソルの位置を取得
				mousePos.offset( -stage.stageWidth / 2, -stage.stageHeight / 2); //ステージの中心に座標をオフセット
				obj3D.rotationX += mousePos.y / 20;
				obj3D.rotationY += mousePos.x / 20;
				renderer.renderScene(scene, camera, viewport);//レンダリング
			}
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
	}
}

この記事をブックマークしておく

コメント:0

コメント投稿

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

この情報を記憶する

トップ > Papervision3D 2.0 > Papervision3D 2.0 オブジェクトの入れ子

記事検索
カテゴリ
RSSフィード

このページの先頭へ戻る