forked from: Blenderでアマゾンさん的な物

by _perfect forked from [Blender][Papervision3D] (diff: 1)
♥0 | Line 94 | Modified 2010-10-16 14:44:41 | MIT License
play

ActionScript3 source code

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

// forked from romatica's Blenderでアマゾンさん的な物
package {
	/*
	title   : [blenderの練習]
	@author :  itoz 
	amazonさん参考(http://n-styles.com/main/archives/2004/07/20-033333.php)
	
	
	ドラッグでrotationYが変わるよ(*・∀・) 
	colladaの読み込みイベント
	colladaテクスチャの読み込みイベントを取得しているけど特に何をしているわけでもないよ(;´Д`)
	
	右腰のあたりに変なメッシュが残ってしまった(;´Д`)
	次回はこれにアニメーションつけてみる
	
	*/
    import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.view.Viewport3D;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.events.FileLoadEvent;
	import org.papervision3d.objects.parsers.Collada;
	import caurina.transitions.Tweener;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.Stage;
    public class AmazonSan extends Sprite {
    		private var _scene:Scene3D;
		private var _camera:Camera3D;
		private var _viewport:Viewport3D;
		private var _render:BasicRenderEngine;
		private var _collada:Collada;
		private var _wrap:DisplayObject3D;
		private var mouseDownX:Number;
		private var mouseDownY:Number;;
		private var isDragging:Boolean = false;
        public function AmazonSan() {
        	setCamera();
			_render = new BasicRenderEngine();
			_scene = new Scene3D();
			_viewport = new Viewport3D(0,0,true,true);
			addChild(_viewport);
			_wrap = new DisplayObject3D();
			_wrap.y=-550;
			_scene.addChild(_wrap);
            init()
        }
        private function init():void {
			addEventListener(Event.ENTER_FRAME,render);
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownHandler);
			stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHandler);
			stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler);
			addCollada();
		}
		private function onMouseMoveHandler(e:MouseEvent):void {
			var xx:Number = (mouseX - mouseDownX);
			if (isDragging) {
				_wrap.rotationY -=xx;
				mouseDownX = mouseX;
				mouseDownY = mouseY;
			}
		}
		private function onMouseDownHandler(e:MouseEvent) :void {
			isDragging =true;
			mouseDownX = mouseX;
			mouseDownY = mouseY;

		}
		private function onMouseUpHandler(e:MouseEvent) :void {
			isDragging =false;
		}
		private function setCamera() :void {
			_camera = new Camera3D();
			_camera.x=550;
			_camera.y=0;
			_camera.z = -1500;
			_camera.target = DisplayObject3D.ZERO;
		}
		private function addCollada() :void {
			_collada = new Collada();
			//COLLADA読み込みイベント
			_collada.addEventListener( FileLoadEvent.LOAD_COMPLETE, onColladaLoadComplete );
			_collada.addEventListener( FileLoadEvent.LOAD_PROGRESS, onColladaLoadProgress);
			_collada.addEventListener( FileLoadEvent.LOAD_ERROR, onColladaLoadError );
			//テクスチャ読み込みイベント
			_collada.addEventListener( FileLoadEvent.COLLADA_MATERIALS_DONE,onTextureLoadComplete);
			//読み込み開始
			_collada.load("http://www.romatica.com/work/amazon-san/AmazonCollada.dae");
			//-----------------------------------------------------------------------------------------
			_wrap.addChild(_collada);
		}
		//------------------------------------------------------------------------------------------
		//COLLADAテクスチャ読み込みイベント完了
		private function onTextureLoadComplete(e):void  {
			//trace("★"+e);
		}
		//------------------------------------------------------------------------------------------
		//COLLADA読み込みイベント
		private function onColladaLoadProgress(e:Event) :void {
			//trace("onColladaLoadProgress >" + e.bytesLoaded +"/"+e.bytesTotal);
		}
		private function onColladaLoadComplete(e:FileLoadEvent) :void {
			//trace("onColladaLoadComplete >" + e);
		}
		private function onColladaLoadError(e:FileLoadEvent) :void {
			//trace("onColladaLoadError >" + e);
		}
		/////////////////////////////////////////////////////////////////////////////////////////////////////
		//
		// レンダリング
		//
		private function render(e:Event) :void {
			if (!isDragging) {
				motionDO3D();
			}
			_camera.y= (mouseY/stage.stageHeight)*3000-1500
			_render.renderScene(_scene,_camera,_viewport);
		}
		private function motionDO3D():void {
			_wrap.rotationY -=1;
		}
    }
}