Papervision3Dでメタセコイアのモデルを表示

Flashの無料開発環境 FlashDevelop + Papervision3DMetasequoia のモデルを読み込んで表示というのをやってみたいと思います。

Papervision3Dで3Dモデルを表示したい場合、標準でcollada形式(.dae)というのがサポートされていますが、こちらの形式は、私のようなモデリング素人には馴染みのないものという気がします。
日本のフリーのモデリングツールの代名詞ともいえる Metasequoia のファイル(.mqo)がそのまま読み込めた方がすごく便利ですよね。

それが簡単にできるクラスがあります。
その名も Metasequoia クラス!
ダウンロードなど詳細はこちら

それではこれをSDKのフォルダにつっこんで試してみようと思いましたが、なにやらエラーが。

どうやら TGADecoder.as BMPDecoder.as というのがいるようです。

それぞれこちらからダウンロードできました。
TGADecoder.as : http://www.libspark.org/browser/as3/Metasequoia/src/org/libspark/pv3d/decoders/TGADecoder.as
BMPDecoder.as :
http://www.libspark.org/browser/as3/BMPDecoder/src/com/voidelement/images/BMPDecoder.as

なお、これらのasファイルは文字コードシフトJISでした。FlashDevelop を標準の設定で使っていた場合、文字コードUTF-8のはずですので、適宜変更しておいてください。

さて、無事にコンパイルが通ったところで、いつものようにお試しコードを。

package 
{
    import flash.events.Event;
    import org.papervision3d.view.BasicView;
    import org.libspark.pv3d.Metasequoia;

    [SWF(backgroundColor="#0000FF", width="400", height="400")]
    public class Main extends BasicView 
    {
        // メタセコイアクラス
        private var model:Metasequoia;
        
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            model = new Metasequoia();
            // mqoの読み込み
            model.load("nekoumori.mqo");
            model.y -= 170;
            scene.addChild( model );            
            camera.zoom = 100;            
            startRendering();
        }
        
        override protected function onRenderTick(event:Event=null):void  
        {   
            model.rotationY += 2;
            renderer.renderScene(scene, camera, viewport);   
        }
    }
    
}

うーん、簡単ですね。以前書いた 3D Hello, world のコードよりも短くできてしまいました。

実行した結果はこんな感じ。