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 ); } } } [PV3D] Collada読み込み 1