2009年11月28日:サンプルコード:DAEによるアニメとテクスチャ適用

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.display.Bitmap;
   
    //importするpapervisionのクラス
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.view.Viewport3D;
    import org.papervision3d.render.BasicRenderEngine;
    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.objects.parsers.DAE;
    import org.papervision3d.events.FileLoadEvent;
    import org.papervision3d.materials.utils.MaterialsList;
    import org.papervision3d.materials.BitmapMaterial;
    import org.papervision3d.materials.ColorMaterial;
   
    /**
     * ...
     * @author l
     */
    public class Main extends Sprite
    {
        private var scene:Scene3D;
        private var viewport:Viewport3D;
        private var camera:Camera3D;
        private var render:BasicRenderEngine;
       
        [Embed (source = "teapot_ani_texture.DAE", mimeType = "application/octet-stream")]
        private var teapotModel : Class;
        private var teapot:DAE;
       
        [Embed (source="teapot_completemap.jpg")]
        private var teapotMap : Class;
       
       
       
        public function Main():void
        {
            var materials : MaterialsList = new MaterialsList();
            var bm : Bitmap = new teapotMap();
            materials.addMaterial( new BitmapMaterial(bm.bitmapData), "teapot" );
            //materials.addMaterial( new ColorMaterial(0xFF0000), "teapot" );   
           
            teapot = new DAE(true,'teapot',true);
            teapot.addEventListener(FileLoadEvent.LOAD_COMPLETE, onDaeComplete)
            teapot.load(new teapotModel(),materials);
        }
       
        private function onDaeComplete(event : FileLoadEvent):void
        {           
            // シーンを作成しキューブをシーンに加える
            scene = new Scene3D();
            scene.addChild(teapot);
         
            // カメラの作成とカメラ座標の設定
            camera = new Camera3D();
            camera.x = 250;
            camera.y = 0;
            camera.z = 250;
           
            //ビューポートを作成
            viewport = new Viewport3D(200, 200);
            this.addChild(viewport);
           
            // レンダラの作成
            render = new BasicRenderEngine(); 
           
            //ENTER_FRAMEにてレンダリングを行う
            this.addEventListener(Event.ENTER_FRAME, render3D);
        }
       
        private function render3D(event:Event):void
        {
              //カメラの上下移動
            camera.y =  (mouseY - stage.stageHeight * 0.5) *10 ;
            camera.x = (mouseX - stage.stageWidth * 0.5) * 5  ;
           
            // カメラが中央のCubeを見るように設定してレンダリング
            camera.lookAt(teapot);
            render.renderScene(scene, camera, viewport);
        }
       
    }
   
}