• ホーム
  • メモ
  • as3
  • AS3 papervision3d BasicView のスタートアップテンプレート

[PR] WEB制作会社PSYCOMMU

as3

AS3 papervision3d BasicView のスタートアップテンプレート

BasicViewにはビューポートとシーンとカメラとレンダラーなどpapervision3dで必要な機能がすでに用意されているspriteを拡張しているクラスみたい。

viewport = new Viewport3D();
addChild(viewport);
scene = new Scene3D();
camera = new Camera3D();
renderer = new BasicRenderEngine();

などをいちいち記述しなくてもいけます

【サンプルswf】

あとこのファイルでポイントの箇所は
3Dオブジェクトを裏表表示したい場合はmaterialのdoubleSidedプロパティをtrueに変更。
defaultはfalse。下記の様に記述すればOK。

var material:WireframeMaterial = new WireframeMaterial(0xFF0000);
material.doubleSided = true;

【Sample20091111.as】

package {
	
	import flash.display.*;
	import flash.events.*;
	
	import org.papervision3d.cameras.*;
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.utils.*;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.render.*;
	import org.papervision3d.scenes.*;
	import org.papervision3d.view.*;
	import org.papervision3d.objects.*;
	
	/*
	 * BasicView参考サイト
	 * http://wakaz.info/2009/02/pv3d_basicview.html
	 */
	
	public class Sample20091111 extends BasicView {

		private var _isMouseDown:Boolean = false;
		private var _oldX:Number=0
		private var _oldY:Number=0
		private var _targetRot:Number = 0;
		private var _targetPitch:Number = 0;
		private var _rot:Number = 0 // 角度
		private var _pitch:Number = 0 // ピッチ=縦の角度
		
		private var _plane:Plane;
			
		public function Sample20091111() {
			
			stage.scaleMode=StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			
			_init();
		
		}
		
		private function _init():void {
			
			/*
			 * 等倍表示のための魔法の値参考サイト
			 * http://blog.r3c7.net/?p=166
			 */

			camera.zoom = 11;
			camera.focus = 100;
			camera.z = -1100;
			
			/*
			 * マテリアル参考サイト
			 * http://clockmaker.jp/blog/2009/05/papervision3d_tutorial_3/
			 */
			
			var material:WireframeMaterial = new WireframeMaterial(0xFF0000);
			//var material:ColorMaterial = new ColorMaterial(0x666666, 1, true);
			
			//裏表表示
			material.doubleSided = true;
			
			_plane = new Plane( material, 100, 100, 1, 1 );
			scene.addChild( _plane );
			
			//レンダリング開始
			startRendering();
			
			/*
			 * カメラの動き参考サイト
			 * http://clockmaker.jp/blog/2009/05/papervision3d_tutorial_5/
			 */
			
			stage.addEventListener(MouseEvent.MOUSE_DOWN,_onMouseDownHandler);
			stage.addEventListener(MouseEvent.MOUSE_UP, _onMouseUpHandler);
			stage.addEventListener(MouseEvent.MOUSE_MOVE, _onMouseMoveHandler);
			
		}
		
		override protected function onRenderTick(event:Event=null):void{   
 
			_rot += (_targetRot - _rot) * 0.05;
			_pitch += (_targetPitch - _pitch) * 0.05;
			
			camera.x = 1100 * Math.sin(_rot * Math.PI / 180);
			camera.z = 1100 * Math.cos(_rot * Math.PI / 180);
			camera.y = 1100 * Math.sin(_pitch * Math.PI / 180);
	
			renderer.renderScene(scene, camera, viewport);   
 
		} 
		
		private function _onMouseDownHandler(e:MouseEvent):void {
			_isMouseDown = true;
			_oldX = mouseX;
			_oldY = mouseY;
		}
		
		private function _onMouseMoveHandler(e:MouseEvent):void {
			
			if(_isMouseDown){
				var dx:Number = e.stageX - _oldX
				var dy:Number = e.stageY - _oldY
				
				_targetRot += dx * 0.25
				_targetPitch += dy * 0.25
				
				_oldX = e.stageX
				_oldY = e.stageY
			}
			
		}
		
		private function _onMouseUpHandler(e:MouseEvent):void {
			_isMouseDown = false
		}
			
	}
}

AS3 papervision3d BasicView のスタートアップテンプレートに対してコメントをする

Copyright 2009 PANDAMA. All rights reserved.
PANDAMA.com 掲載の記事・写真・図表など無断転載を禁止します。著作権はPANDAMA.comに属します。