forked from: flash on 2009-5-21

by oreore forked from flash on 2009-5-21 (diff: 26)
flash
papervision3D
プロファイラー
♥0 | Line 53 | Modified 2009-05-21 06:36:36 | MIT License
play

ActionScript3 source code

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

// forked from toni's flash on 2009-5-21
package  
{
	//flash
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;

	//papervision3D
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.special.CompositeMaterial;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.core.effects.view.ReflectionView;
	
	//プロファイラー
	import com.flashdynamix.utils.SWFProfiler;

	
	public class Main extends Sprite
	{
		private var plane:Plane;
		private var viewPort:ReflectionView;
		
		public function Main() 
		{
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			SWFProfiler.init(this);
			init();
		}
		
		private function init():void
		{
			/************************************************************************
			* 1.ビューポートを生成する(ReflectionViewを使ってみる)
			* ReflectionViewの中を見てみるとBasicViewを継承しているので
			* 以前BasicViewでつくったものと考え方は同じになる
                        * 第三引数  scaleToStage:Boolean = trueになっていれば 高さと幅は0でよいことに
                        * ようやく気づきました;
			************************************************************************/
			viewPort = new ReflectionView(0, 0, true,false);
			addChild(viewPort);
			
			/************************************************************************
			* 2.カメラの設定
			* ReflectionView を new したときに カメラが生成されているので
			* viewPort.camera でアクセスします。
			************************************************************************/
			viewPort.camera.z = -1000;
			viewPort.camera.y = 500;
			
			/************************************************************************
			* 3.シーンの作成
			* カメラと同様にReflectionView を new したときに シーンも生成され
			* ているので今回はnew しない。
			************************************************************************/
			//今回は特になにもしないが混乱を避けるためにあえて記載しとく
			//なしもしないけどシーンはできてるよ~!
			//BasicViewクラスの中をみるとscene3Dが作成されてました。
			
			/************************************************************************
			* 4.レンダリング
			* 鏡面効果を使う場合はenterFrame内でsingleRenderingを
			* 使わないといけない。
			* この辺はまったく解読不能でした。
			* ひとまず鏡面反射はsingleRenderingと覚えることにした。
			* どなたかこの理由を簡単に解説いただければ幸いです。
			************************************************************************/
			//viewPort.startRendering();
			
			
			/************************************************************************
			* 5.3Dオブジェクトの生成
			************************************************************************/
			
			//板を作成
			var wfm:WireframeMaterial = new WireframeMaterial();
			wfm.doubleSided = true;//裏も描画する
			plane = new Plane(wfm, 300, 200, 4, 4);
			viewPort.scene.addChild(plane);
			
			//床を作成
			var floorMate:CompositeMaterial = new CompositeMaterial();
			floorMate.addMaterial(new WireframeMaterial(0x696969,50));
			floorMate.addMaterial(new ColorMaterial(0xdcdcdc,0.5));
			var floor:Plane = new Plane(floorMate, 1000, 1000, 12, 12);
			floor.rotationX = 90;
			viewPort.scene.addChild(floor);
			
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
			
		}
		
		private function onEnterFrame(e:Event):void 
		{
			plane.y += 1;
			plane.rotationX += 1;
			plane.rotationZ += 1;
			
			viewPort.singleRender();
		}
		
	}
	
}