In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

[PV3D] Collada読み込み 1

シンプルCollada読み込みサンプル
アニメーションもテクスチャもないColladaの読み込み。ここでひっかかることはあんまなさそう。
@author ish-xxxx
Get Adobe Flash player
by ish_xxxx 07 Apr 2009
package  {
	import flash.display.Sprite;
	import flash.events.Event;
	import org.papervision3d.events.FileLoadEvent;
	import org.papervision3d.objects.parsers.DAE;
	import org.papervision3d.view.Viewport3D;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.lights.PointLight3D;
	import net.hires.debug.Stats;
	/**
	 * シンプルCollada読み込みサンプル
	 * アニメーションもテクスチャもないColladaの読み込み。ここでひっかかることはあんまなさそう。
	 * @author ish-xxxx
	 */
	public class App extends Sprite {
		
		private const MODEL_SOURCE_PATH:String = "http://ish-2i.heteml.jp/trunk/model/demo.dae";
		private var v:Viewport3D, r:BasicRenderEngine, s:Scene3D, world:DisplayObject3D, camera:Camera3D, dae:DAE;
		private var container:Sprite;
		
		/**
		 * コンストラクタ
		 */
		public function App() {
			
			//別にいらないけど、とりあえず空のSprite作って一個階層下げる
			container = addChild( new Sprite ) as Sprite;
			
			//ビューポート作る
			v = container.addChild( new Viewport3D( 0, 0, true, true ) ) as Viewport3D;
			
			//レンダリングエンジン作る
			r = new BasicRenderEngine;
			
			//シーン作る
			s = new Scene3D;
			
			//DAEオブジェクト作る
			dae = new DAE( false, "collada", false );
			
			//階層下げておくとなにかと便利か
			world = s.addChild( new DisplayObject3D ) as DisplayObject3D;
			
			//カメラ作る
			camera = new Camera3D;
			
			//FileLoadEventでColladaの読み込みを監視
			dae.addEventListener( FileLoadEvent.LOAD_COMPLETE, onColladaLoadComplete );
			dae.addEventListener( FileLoadEvent.LOAD_ERROR, onColladaLoadError );
			
			//Collada読み込み開始
			dae.load( MODEL_SOURCE_PATH );
		}
		
		/**
		 * Collada読み込み完了
		 * @param	ev
		 */
		private function onColladaLoadComplete( ev:FileLoadEvent ) : void {
			
			//ニセカメラ回転用のDisplayObject3DにaddChildする
			world.addChild( dae );
			
			//小さいかもなのでとりあえず大きく。camera.zoomでもいいか
			dae.scale = 100;
			
			//レンダリング開始
			addEventListener( Event.ENTER_FRAME, render );
			
			//Stats
			addChild( new Stats );
		}
		
		/**
		 * Collada読み込みエラー
		 * @param	ev
		 */
		private function onColladaLoadError( ev:FileLoadEvent ) : void {
			/**/
		}
		
		/**
		 * 毎フレーム処理。renderEngineをまわす。あとは個別に回転とか。
		 * @param	ev
		 */
		private function render( ev:Event ) : void {
			
			//ニセカメラ回転
			world.rotationX += ( ( mouseY - 225 ) - world.rotationX ) / 8;
			world.rotationY += ( ( mouseX - 225 ) - world.rotationY ) / 8;
			
			//レンダリング
			r.renderScene( s, camera, v );
		}
	}
}