FLEX with PV3D , 3D 世界的樂章
前一陣子一個朋友問了我如何在製作 PV3D 的應用程式,寫起來似乎很麻煩,他是開發一個應用系統,但是某個部份的顯示希望是 3D 的表達,但是 3D 的部分也不算多,雖然是核心,但是還有很多應用程式,例如資料的處理,或是按鈕,或是資料表格,這樣一來如果整個都是用 FLEX 來做的話真的會死人阿,所以告訴他用 FLEX 來載入 PV3D 即可,其他邏輯處理諸如 AMF 資料處理,按鈕的處理都用 FLEX 來做,只有需要 3D 呈現的部分再用 PV3D 來做即可。
圖片 : 簡單的匯入 PV3D 物件,並且加上呼叫 3D 物件方法
其實之前我就有試過從 FLEX 載入 PV3D 的物件,不過當初是用 SWFLoader 來讀取 PV3D 所製作完成的 SWF 檔案,不過遇到一個呼叫 Stage 的問題,會無法正確載入,必須在呼叫 Stage 物件之前加上 Event.added_on_stage 的事件偵聽,才不會出錯,但是這樣開發也蠻辛苦的,誰知道會發生甚麼事情,不過因為在忙別的事情就沒有測試了,今天提問題的朋友自己找出了一個老外的網站,而且還是影片檔呢,講的蠻清楚的,PV3D ON FLEX 教學影片,我當然也不放過,實際來測試了一下,並且加上幾個呼叫方法。
不過因為 PV3D 一建立起來會放在整個視窗的正中間,而且又跟背景的物件位置不太一樣,這樣子要固定在我們想要出現的地方可就麻煩嚕,還要再研究看看。
這次的範例主要是給已經會使用 PV3D 的朋友看得,所以我就不再告知 PV3D 要在哪邊抓等等的介紹了,如果有興趣可以參考 milkmidi Blog 與 finger 手指上的世界 ,我是用 PV3D 的 SWC 來製作的。
PV3DonFLEX.mxml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="14" creationComplete="init()" frameRate="41">
<mx:Script>
<![CDATA[
private var cube3d:Cube3d = new Cube3d();
private function init():void{
this.PV3DArea.addChild(this.cube3d);
}
]]>
</mx:Script>
<mx:Canvas width="90%" height="80%" backgroundColor="white">
<mx:UIComponent id="PV3DArea" width="100%" height="100%"/>
</mx:Canvas>
<mx:ApplicationControlBar>
<mx:Button label="左轉" click="this.cube3d.turnLeft()"/>
<mx:Button label="右轉" click="this.cube3d.turnRight()"/>
<mx:Button label="上轉" click="this.cube3d.turnUp()"/>
<mx:Button label="下轉" click="this.cube3d.turnDown()"/>
<mx:Button label="Zoom in" click="this.cube3d.zoomIn()"/>
<mx:Button label="Zoom out" click="this.cube3d.zoomOut()"/>
</mx:ApplicationControlBar>
</mx:Application> |
Cube3d.as
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package { import flash.display.Sprite; import flash.events.Event; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.view.BasicView; public class Cube3d extends Sprite { private var view:BasicView; private var plane:Plane; public function Cube3d() { this.init3DEngine(); this.init3DObject(); } private function init3DEngine():void{ view = new BasicView(0, 0, true, true, "Target"); this.addChild(view); this.addEventListener(Event.ENTER_FRAME, onEventRender3D); } private function init3DObject():void{ var wireMat:WireframeMaterial = new WireframeMaterial(0xA7C520, 1); wireMat.doubleSided = true ; this.plane = new Plane(wireMat,400,400); view.scene.addChild(this.plane); } private function onEventRender3D(event:Event):void{ this.view.singleRender(); } public function turnLeft():void{ this.plane.rotationY -= 10 ; } public function turnRight():void{ this.plane.rotationY += 10 ; } public function turnUp():void{ this.plane.rotationX += 10 ; } public function turnDown():void{ this.plane.rotationX -= 10 ; } public function zoomIn():void{ this.plane.z -= 10 ; } public function zoomOut():void{ this.plane.z += 10 ; } } } |
Random Posts
Loading…
相關文章 :










你可以學慢一點嗎?
我都還沒開始,
你玩點別的,讓我追一下~~
這個又不是我在玩的 ^^
是別人玩的~我只是看到做看看罷了~~
CCC~~
太棒了啦~~真是開發的心路歷程~
有空也發表一下自己的心得吧 ^_^
真是棒阿!~~~
最近才趕paper
沒時間研究新的東西(汗顏)
改天再來交流交流…^__^
@cloudfly
老實說我也快不知道寫什麼了 XD
看來只能再繼續練習基本功 ~ 呵呵~~
找到方法勒~PV3D在Flex中是無法Align置中的,當然必須寫code設定物件位置
而卻可以讓他在整個瀏覽器中呈現原先PV3D效果的位置
設定BasicView(0, 0, true, true);
@壞蛋
這個不是跟我現在寫的是一樣的嗎?~
有點偏移的感覺 XD
你好
我是剛開始學FLEX的初學者 我想請問你這是利用flash再到flex中輸出的吧
我有在3dsMAX環境中建立模型
後來轉成DAE 之後想要在FLEX瀏覽
可是不知道該怎麼做
可以給我ㄧ些方向嗎
@forgot
這個不是先建立好 3D 的 SWF 在放入 FLEX 中喔~
而是在 FLEX 直接建立 3D 物件
如果你在 3DS 建立好模型並且已經轉成 DAE 格式
只需要在 PV3D 寫好輸入模型
並且放入 FLEX 即可~
改天再寫個範例看看好了~
對對對
我已經在3D中轉換成DAE格式了
只是不會放入FLEX中
我找到一個教學很類似把DAE放進flex中
http://shardulbartwal.wordpress.com/2008/06/20/3d-in-flex-3/
可是我照他的作一直失敗 可以請大師幫我看一下嗎
private var objScene:Scene3D = new Scene3D();
這一行一直出錯
@forgot
今天我應該可以弄一個 DAE 的範例給你參考看看~
真的嗎 太感謝你了
大師在上 受小弟一拜
@forgot
我寫好囉
PV3D WITH PV3D DAE 模型請參考
http://blog.corausir.org/programing/ausir-899
請問一下
為什麼我使用Actionscript Project
裡面的Loader去讀取Flex做出來的SWF檔
會沒有辦法讀出來
@CRI
不是很清楚你的寫法
你也是在寫 PV3D 嗎
我想做的是
我利用Flex做了一個 Panel(裡面不用功能,單純的一個物件)
當我執行後
它應該會產生一個swf的檔案在bin-debug
然後我再去開一個Actionscript Project
去讀取我剛剛產生出的swf檔
可是沒辦法看到swf檔裡面的東西
但是
我用Flash產生出的swf
就可以看到
在 Actionscript Project裡面是這樣寫的
var myLoader:Loader=new Loader();
addChild(myLoader);
var url:URLRequest=new URLRequest(”XX.swf”);
myLoader.load(url);
我也是最近開始學PV3D的
但是我想知道
可不可以在Flex Project裡面寫完一個PV3D之後
在 Actionscript Project裡面可以讀取到他的swf檔
不知道這樣有沒有清楚一點
@CRI
FLEX 開發的 APP 有程式進入點的設定
如果你直接放到 AS 裡面 LOADER 應該是會有問題
所以沒辦法去讀取FLEX所開發出來的swf檔嗎
還是有辦法可以讀取到
@CRI
通常會把 FLEX 的 APP 當作最上層的程式進入點喔~
你好,我用了你的方法在flex编译后还是不能在网页中显示模型,请问会是什么原因,单独打开swf文件是可以的。