Flexでメタセコイアを3D表示(もやしもん)
Flexでメタセコイアを3D表示してみました。
以前のはちゅねミクと同じですが、マウスカーソルにゆっくり追従します。
自分でメタセコイアでせこせこオリゼーを作成しました。
メタセコイア
材質、色を塗るときに参考になるページ
追加クラスはPapervision3D (1.5?)とメタセコイア読み込みクラスです。
Papervision3D
メタセコイア形式の読み込みクラス
あと趣味で鏡面反射を入れています。
Live Reflection
実際の動作はこちら
ソースはこんな感じになります。
もやしもんのメタセコイアデーターも一緒に入ってますので、よろしければどうぞ。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" horizontalScrollPolicy="off" verticalScrollPolicy="off" backgroundAlpha="0.0" width="435" height="378" borderStyle="none" mouseFocusEnabled="true" mouseEnabled="true" creationComplete="initapp()" viewSourceURL="srcview/index.html" xmlns:flashFilter="flash.filters.*" xmlns:reflector="com.rictus.reflector.*" xmlns:dragpanel="com.rictus.dragpanel.*" > <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; private var obj:Metasequoia = new Metasequoia(); public function initapp():void{ // 新しいスプライトを作って表示リストに入れておく。 container = new Container(); container.x = this.width/2; container.y = this.height/2; container.width = 80; container.height = 80; myCanvas.addChild(container); // シーンを作る。 scene = new Scene3D(container); // カメラを作る。 camera = new Camera3D(); camera.y = 0; camera.x = 270; camera.z = 0; camera.zoom = 300; camera.focus = 1; // 3D シーンにルートオブジェクトを作る0。 rootNode = scene.addChild(new DisplayObject3D("rootNode")); obj.load("orize4.mqo", 0.1 ); obj.rotationY = 90; rootNode.addChild(obj, "player"); container.filters = [fil]; // タイマーイベント作成 var timer:Timer = new Timer(80,0); timer.addEventListener(TimerEvent.TIMER , myTimer ); timer.start(); } private function myTimer( event:TimerEvent ) :void{ obj.rotationX += (-this.mouseY - 90 - obj.rotationX )*0.1; obj.rotationY += ( -this.mouseX * 2 - 200 - obj.rotationY)*0.1; container.x += (this.mouseX - container.x ) * 0.1; container.y += (this.mouseY - container.y ) * 0.1; scene.renderCamera(camera); } ]]> </mx:Script> <mx:Image x="0" y="0" width="442" height="378" source="bg.jpg"/> <reflector:Reflector target="{myCanvas}" alpha="0.5" falloff="0.8"/> <mx:Canvas x="0" y="0" width="435" height="378" id="myCanvas" horizontalScrollPolicy="off" verticalScrollPolicy="off" > </mx:Canvas> <mx:filters> <flashFilter:DropShadowFilter id="fil" inner="false" distance="4" angle="90" color="0x000000" alpha="0.4" /> </mx:filters> </mx:Application>