FlexでPaperVision3D(1.7)でメタセコイア
前々から何度もメタセコイアをpapervision3dなflexに読み込みをチャレンジしてたんだけど、今回ついにできたのでアップです。
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>