首頁 > FLEX, 程式設計 > FLEX with PV3D , 3D 世界的樂章

FLEX with PV3D , 3D 世界的樂章

2009年3月31日  瀏覽次數 : 8,730

前一陣子一個朋友問了我如何在製作 PV3D 的應用程式,寫起來似乎很麻煩,他是開發一個應用系統,但是某個部份的顯示希望是 3D 的表達,但是 3D 的部分也不算多,雖然是核心,但是還有很多應用程式,例如資料的處理,或是按鈕,或是資料表格,這樣一來如果整個都是用 FLEX 來做的話真的會死人阿,所以告訴他用 FLEX 來載入 PV3D 即可,其他邏輯處理諸如 AMF 資料處理,按鈕的處理都用 FLEX 來做,只有需要 3D 呈現的部分再用 PV3D 來做即可。

image 圖片 : 簡單的匯入 PV3D 物件,並且加上呼叫 3D 物件方法

其實之前我就有試過從 FLEX 載入 PV3D 的物件,不過當初是用 SWFLoader 來讀取 PV3D 所製作完成的 SWF 檔案,不過遇到一個呼叫 Stage 的問題,會無法正確載入,必須在呼叫 Stage 物件之前加上 Event.added_on_stage 的事件偵聽,才不會出錯,但是這樣開發也蠻辛苦的,誰知道會發生甚麼事情,不過因為在忙別的事情就沒有測試了,今天提問題的朋友自己找出了一個老外的網站,而且還是影片檔呢,講的蠻清楚的,PV3D ON FLEX 教學影片,我當然也不放過,實際來測試了一下,並且加上幾個呼叫方法。

不過因為 PV3D 一建立起來會放在整個視窗的正中間,而且又跟背景的物件位置不太一樣,這樣子要固定在我們想要出現的地方可就麻煩嚕,還要再研究看看。

這次的範例主要是給已經會使用 PV3D 的朋友看得,所以我就不再告知 PV3D 要在哪邊抓等等的介紹了,如果有興趣可以參考 milkmidi Blogfinger 手指上的世界 ,我是用 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

?View Code ACTIONSCRIPT
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…

:: 把這篇好文推到書籤網站與更多人分享吧 ::
  • funp
  • Hemidemi
  • YahooKimo
  • Google
  • udn
  • Haohao
  • Live

相關文章 :

Ausir FLEX, 程式設計 , , , ,

  1. 2009年3月31日10:28 | #1

    你可以學慢一點嗎?
    我都還沒開始,
    你玩點別的,讓我追一下~~

  2. 2009年3月31日12:12 | #2

    梅干扣肉 :

    你可以學慢一點嗎?
    我都還沒開始,
    你玩點別的,讓我追一下~~

    這個又不是我在玩的 ^^

    是別人玩的~我只是看到做看看罷了~~
    CCC~~

  3. 2009年3月31日12:49 | #3

    太棒了啦~~真是開發的心路歷程~

  4. 2009年3月31日12:50 | #4

    壞蛋 :

    太棒了啦~~真是開發的心路歷程~

    有空也發表一下自己的心得吧 ^_^

  5. cloudfly
    2009年3月31日12:58 | #5

    真是棒阿!~~~

    最近才趕paper

    沒時間研究新的東西(汗顏)

    改天再來交流交流…^__^

  6. 2009年3月31日13:05 | #6

    @cloudfly

    老實說我也快不知道寫什麼了 XD

    看來只能再繼續練習基本功 ~ 呵呵~~

  7. 2009年3月31日18:23 | #7

    找到方法勒~PV3D在Flex中是無法Align置中的,當然必須寫code設定物件位置
    而卻可以讓他在整個瀏覽器中呈現原先PV3D效果的位置
    設定BasicView(0, 0, true, true);

  8. 2009年4月1日00:31 | #8

    @壞蛋
    這個不是跟我現在寫的是一樣的嗎?~

    有點偏移的感覺 XD

  9. forgot
    2009年4月4日22:25 | #9

    你好
    我是剛開始學FLEX的初學者 我想請問你這是利用flash再到flex中輸出的吧
    我有在3dsMAX環境中建立模型
    後來轉成DAE 之後想要在FLEX瀏覽
    可是不知道該怎麼做
    可以給我ㄧ些方向嗎

  10. 2009年4月5日01:17 | #10

    @forgot

    這個不是先建立好 3D 的 SWF 在放入 FLEX 中喔~
    而是在 FLEX 直接建立 3D 物件

    如果你在 3DS 建立好模型並且已經轉成 DAE 格式
    只需要在 PV3D 寫好輸入模型
    並且放入 FLEX 即可~

    改天再寫個範例看看好了~

  11. forgot
    2009年4月5日16:08 | #11

    對對對
    我已經在3D中轉換成DAE格式了
    只是不會放入FLEX中

  12. forgot
    2009年4月6日11:18 | #12

    我找到一個教學很類似把DAE放進flex中
    http://shardulbartwal.wordpress.com/2008/06/20/3d-in-flex-3/
    可是我照他的作一直失敗 可以請大師幫我看一下嗎
    private var objScene:Scene3D = new Scene3D();
    這一行一直出錯

  13. 2009年4月6日12:00 | #13

    @forgot

    今天我應該可以弄一個 DAE 的範例給你參考看看~

  14. forgot
    2009年4月6日17:17 | #14

    真的嗎 太感謝你了
    大師在上 受小弟一拜

  15. 2009年4月6日23:25 | #15

    @forgot

    我寫好囉
    PV3D WITH PV3D DAE 模型請參考
    http://blog.corausir.org/programing/ausir-899

  16. CRI
    2010年1月6日13:34 | #16

    請問一下
    為什麼我使用Actionscript Project
    裡面的Loader去讀取Flex做出來的SWF檔
    會沒有辦法讀出來

  17. 2010年1月6日13:37 | #17

    @CRI

    不是很清楚你的寫法

    你也是在寫 PV3D 嗎

  18. CRI
    2010年1月6日14:05 | #18

    我想做的是
    我利用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檔

    不知道這樣有沒有清楚一點

  19. 2010年1月6日14:09 | #19

    @CRI

    FLEX 開發的 APP 有程式進入點的設定
    如果你直接放到 AS 裡面 LOADER 應該是會有問題

  20. CRI
    2010年1月6日14:14 | #20

    所以沒辦法去讀取FLEX所開發出來的swf檔嗎
    還是有辦法可以讀取到

  21. 2010年1月6日14:49 | #21

    @CRI

    通常會把 FLEX 的 APP 當作最上層的程式進入點喔~

  22. fish
    2010年5月31日02:48 | #22

    你好,我用了你的方法在flex编译后还是不能在网页中显示模型,请问会是什么原因,单独打开swf文件是可以的。

  1. 本篇文章目前尚無任何 trackbacks 和 pingbacks。