PV3D+Maya
MayaでBakeされたテクスチャをPaperVision3Dで複数表示してみました。
こんな感じ
http://moeten.info/flex/20081208_pv3dColladaMaya3/bin-release/main.html
簡単な説明
ColladaMayaっという便利なライブラリがあったのでそちらでMaya->Collada(dae)形式で出力。
前回の紹介のFBXコンバーダライブラリと違う点は、Bakeされたテクスチャの出力ができることです。
こっちのライブラリのほうが便利です。
出力設定項目はこちら
Flashで出力する際に気をつける点はテクスチャパスの指定くらい。
相対パスか絶対パスかの設定。普通は相対パスが便利。
あとPaperVision3Dには3Dの読み込み方法がいくつかありますが「Collada」で読み込むするほうが便利です。以前は「DAE」で読み込みをしていたのですが、テクスチャの指定が面倒なので「Collada」が便利です。
以前のDAEクラスの場合
private var myDae:DAE; private function setupCollada():void{ myDae = new DAE(); var mat1:BitmapFileMaterial = new BitmapFileMaterial( "lambert2SG-pCube2.1.jpg"); var mat2:BitmapFileMaterial = new BitmapFileMaterial( "lambert2SG-pPipe1.1.jpg"); var mat3:BitmapFileMaterial = new BitmapFileMaterial( "lambert2SG-pTorus1.jpg"); var mat4:BitmapFileMaterial = new BitmapFileMaterial( "phong1SG-pPlane1.2.jpg"); var matlist:MaterialsList = new MaterialsList(); matlist.addMaterial( mat1 , "lambert2SG6" ); matlist.addMaterial( mat2 , "lambert2SG7" ); matlist.addMaterial( mat3 , "lambert2SG5" ); matlist.addMaterial( mat4 , "phong1SG1" ); myDae.load("test15.dae" ); myDae.scale = 10; scene.addChild(myDae); }
今回のCollada形式の場合
private var myDae:Collada; private function setupCollada():void{ myDae = new Collada(); myDae.load("test15.dae" ); myDae.scale = 0.05; scene.addChild(myDae); }
かなりスマートになります。Scaleの設定が違うのが注意。
すべてのソースはこちら
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init3D()" width="1040" height="980" backgroundGradientColors="[0xffffff,0x999999]" viewSourceURL="srcview/index.html"> <mx:Script> <![CDATA[ import org.papervision3d.objects.parsers.Collada; /* ********************************** PV3D ********************************** */ import org.papervision3d.cameras.Camera3D; import org.papervision3d.render.BasicRenderEngine; import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.materials.BitmapFileMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.parsers.DAE; private var scene : Scene3D; private var viewport : Viewport3D; private var renderer : BasicRenderEngine; private var camera : Camera3D; private var cameraTarget : DisplayObject3D; //初期化 private function init3D():void{ setupScene(); setupCollada(); setupCamera(); setupListeners(); } //シーンの作成 private function setupScene():void{ viewport = new Viewport3D( myUI.width , myUI.height , true , false , true , true ); myUI.addChildAt(viewport , 0); renderer = new BasicRenderEngine(); scene = new Scene3D(); } //カメラ設定 private function setupCamera():void{ cameraTarget = new DisplayObject3D(); camera = new Camera3D(); camera.z = - 300; camera.y = 100; camera.lookAt(myDae); } //イベントリスナー設定 private function setupListeners():void{ this.addEventListener(Event.ENTER_FRAME , onRenderTick ); } //レンダリング+マウス操作 protected function onRenderTick(e:Event):void { var reach:Number = 0.01; var ease:Number = 0.1; var cameraDistance:Number = 400; // camera.x += (Math.sin(mouseX * reach) * cameraDistance - camera.x) * ease; // camera.y += (Math.sin(mouseY * reach) * cameraDistance - camera.y) * ease; myDae.rotationY -=1; renderer.renderScene(scene , camera , viewport ); } //リサイズイベント private function onResize(e : Event) : void { } /* ***************** myMain ***************** */ //Daeの作成 //import org.papervision3d.events.FileLoadEvent; private var myDae:Collada; private function setupCollada():void{ myDae = new Collada(); // myDae.addEventListener(FileLoadEvent.LOAD_COMPLETE , onSceneGeometryLoaded ); // myDae.addEventListener(FileLoadEvent.ANIMATIONS_COMPLETE , onSceneAnimationsLoaded); // var mat1:BitmapFileMaterial = new BitmapFileMaterial( "lambert2SG-pCube2.1.jpg"); // var mat2:BitmapFileMaterial = new BitmapFileMaterial( "lambert2SG-pPipe1.1.jpg"); // var mat3:BitmapFileMaterial = new BitmapFileMaterial( "lambert2SG-pTorus1.jpg"); // var mat4:BitmapFileMaterial = new BitmapFileMaterial( "phong1SG-pPlane1.2.jpg"); // var matlist:MaterialsList = new MaterialsList(); // matlist.addMaterial( mat1 , "lambert2SG6" ); // matlist.addMaterial( mat2 , "lambert2SG7" ); // matlist.addMaterial( mat3 , "lambert2SG5" ); // matlist.addMaterial( mat4 , "phong1SG1" ); // myDae.meshSort = 1; myDae.load("test15.dae" ); myDae.scale = 0.05; scene.addChild(myDae); } private function onSceneAnimationsLoaded(e:Event):void{ } private function onSceneGeometryLoaded(e:Event):void{ } ]]> </mx:Script> <mx:UIComponent id="myUI" width="100%" height="100%" y="-20"/> </mx:Application>