FlexでPaperVision3D(1.7)でメタセコイア

前々から何度もメタセコイアpapervision3dflexに読み込みをチャレンジしてたんだけど、今回ついにできたのでアップです。
flash上で動いている回転する初音ミクの3Dモデル!にてリンクを貼っていただきました。ありがたや。
Flashはこちら(重いお?)。右クリックでソースの表示やDLもできますので。
http://moeten.info/hatena/20071123_pv3d2/bin/main.html

papervision3dの最新版を取得します。

TortoiseSVNで以下のURLをゲットしてきます。
http://papervision3d.googlecode.com/svn/
今回試したバージョンはリビジョン341です。
SVNでいろいろとクリックして保存できたらas3/trunk/srcの中のファイル(com,org)をこれから作成するプロジェクトのフォルダにコピーします。この辺はpv3dでググルとわかりやすいのが出るのでそちらを参照してください。

メタセコイア形式読み込みクラスをダウンロードします。

http://snippets.libspark.org/trac/wiki/rch850/Metasequoia
こちらにメタセコイア読み込み用クラスがあります。
Metasequoia.asファイルを保存してプロジェクトのorg/libsparkに入れます。

メタセコイアなデーターをダウンロード

こちらにあります。
http://nanoha.kirara.st/3dcg/file/
nh0082.zipがはちゅねみくです。
ついでにミクな3Dの紹介サイト。
http://vocaloid.blog120.fc2.com/blog-entry-56.html
保存してプロジェクトのフォルダに入れたら準備OKです。
プログラムはこんな感じです。ほとんどあっちこっちのサイトを参考にしてコピペ+修正なんだけど。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initapp()" backgroundGradientColors="[#80ff80, #80ff80]" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.core.Container;
import flash.display.*;
import flash.events.*;
import flash.utils.Timer
import org.libspark.pv3d.Metasequoia;
import org.papervision3d.core.*;
import org.papervision3d.cameras.*;
import org.papervision3d.materials.*;
import org.papervision3d.objects.*;
import org.papervision3d.scenes.*;
// Papervision3D 系
private var container:Container;
private var scene:Scene3D;
private var rootNode:DisplayObject3D;
private var camera:Camera3D;
public    var obj:Metasequoia = new Metasequoia();
public function initapp():void{
    // 新しいスプライトを作って表示リストに入れておく。
    container = new Container();
    container.x = 400 / 2;
    container.y = 480 / 2;
    container.width = 400;
    container.height = 400;
    this.addChild(container);
    // シーンを作る。
    scene = new Scene3D(container);
    // カメラを作る。
    camera = new Camera3D();
    camera.y = 50;
    camera.x = 250;
    camera.z = 0;
    camera.zoom = 300;
    camera.focus = 1;
    // 3D シーンにルートオブジェクトを作る。
    rootNode = scene.addChild(new DisplayObject3D("rootNode"));
    obj.load("miku01.mqo", 1 );
    rootNode.addChild(obj, "player");
    this.addEventListener(Event.ENTER_FRAME, loop3D);
}
private function loop3D(evt:Event):void {
    // シーンをレンダリングします
    obj.rotationX = -this.mouseY-150;
    obj.rotationY = -this.mouseX*2-200;
    scene.renderCamera(camera);
}
]]>
</mx:Script>
</mx:Application>