[PV3D] Collada読み込み 1
シンプルCollada読み込みサンプル
アニメーションもテクスチャもないColladaの読み込み。ここでひっかかることはあんまなさそう。
@author ish-xxxx
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 );
}
}
}