Away3D 基礎 2 視口與場景

2022-09-06 08:48:12 字數 3740 閱讀 8928

technorati 標籤: view3d,scene3d

當您通過視窗向里看時,你所看到的不是房內的所有景物,你能看到的由視窗大小、形狀所決定的。你所見的只是被窗「裁剪」掉的不全的小部分景物。這能夠恰如其分地說明「視口view」的工作原理,它就是我們觀察3d世界的「視窗」。

不管你想要在away3d做什麼,有幾件事你永遠需要設定。本指南將解釋scene場景、view視口、camera照相機、primitives基本3d物體、textures紋理和**其他可能碰到的概念。本指南的一系列的例子其**都是由as3指令碼構成,所以這些例子同時可以在flash、flex裡執行。

如果你是3d菜鳥,你可能想要看我們關於

三維核心概念的介紹

。指南中含有6 個away3d專案例項。執行例項檔案前,你首先需要在您的計算機上

設定away3d開發環境

cover.as

要呈現3d內容,首先要有view(視口)scene(場景);本篇教程主要講講這二者。

view(視口)

視口,在away3d中的類名是view3d。新建乙個視口類例項要用到以下**:

1. var view:view3d = new view3d();

視口的預設值是無窮大的,即相當於「視窗」是無限大的,我們看到的將是外面的所有景物(flas***的全部內容),即flash尺寸是視口的有效視域.傳統電視的高寬比為4:3,現在的高畫質電視的高寬比為16:9,你也可以如此這般地去設定flas***的高與寬來確定輸出尺寸.

值得注意的是雖然away3d的view3d類繼承自as3的sprite類,但是沒有width與height屬性.在flex裡可能會提示你存在著這些屬性(目前版本),但即使你嘗試去設定該屬性那也是無效的,視口的有效範圍仍整個flash.不過你可以通過設定"clipping"屬性輕鬆解決這一問題(稍後解釋).

另外你還可以設定x/y屬性對視口定位,但是對away3d新手來說這裡有個非常容易搞混的地方,設定視口的x/y時不僅在舞台上移動視口的位置,同時還改變了視口裡的座標.為了盡可能避免出錯,你應該總是將視口的x/y設定為高/寬的一半,這樣可以確保內容顯在**。教程中的例子高寬是465*400的,所以我們建立view3d類例項時會對x/y引數進行如下設定:

1.var view:view3d = new view3d();

當然你也可以建立好視口類例項後再設定引數:

1.var view:view3d = new view3d();

2.view.x = 232;

3.view.y = 200;

正如本指南開篇講的那樣,建立視口的同時會自動生成預設的scene(場景)與camera(照相機).但你也可以象上邊設定view的x/y屬性的二種方式那樣對預設的場景與照相機進行修改.

建立好視口,不等於視口就可以顯示其中場景中的3d景物.我們還要用render()方法告訴計算機對視口進行渲染.

1.view.render();

一般你會逐幀或間隔時間呼叫這個命令.但要小心.假如你flas***的幀頻設的過快或間隔時間過短,這會拖慢你的電腦.這就要求我們設定乙個最佳值.據一般經驗,保持在25-30 fps間即可保證電腦速度又可基本達到完美渲染的目地.

設定"view.clipping"效果如同設定視口的高與寬一樣(假如可以設定高寬屬性的話)裁剪視口大小,讓視口有效範圍不再是整個flas***.下面例子中有多個視口,這些視口裡裝的是同一場景只是**角度不同.

movie:

點此**

as:basic02.as

basic02_view.as

在這個例子裡用到乙個技巧,我們將每個視口都放進乙個sprite裡,用對這個sprite定位來保證視口的x/y屬性設定無誤即等於視口高寬的一半,注意在basic02_view.as裡的乙個rectangleclipping是如何起效的。另乙個非常有用的技巧就是將一複雜區域切分成幾個視口,各個視各為所用,就象flash裡層一樣.

scene(場景)

場景就象是flash裡的舞台,場景中的任何東西都可以展示出來。建立場景有二種方法。最簡單的方法就是在建立view視口時away3d會自動建立乙個場景。

1.var view:view3d = new view3d();

上邊**在建立視口的同時建立了乙個場景。這樣你就可以通過"view.scene"訪問場景了。當然你也可以手動建立場景然後把場景傳遞給視口:

1 var myscene:scene3d = new scene3d;

2 var view:view3d = new view3d();

上邊**就是我們用多個視口展現同一場景例子中的部分**。在這裡我們為場景指定了引用名為「myscene」,這比第一種方法裡用view.scene引用場景更為直接。

一旦你在視口裡「安放」好場景這個「舞台」,你就會迫不及待地想往這個「舞台」上新增些你想展示給大家的3d內容。away3d裡的3d內容必須放在場景或在場景中的3d容器中才行。3d容器裡我們可以放置幾個3d內容,這樣我們就可以象操作單個3d物那樣操作放在同一3d容器裡的多個3d物。

我們先建立乙個3d物,乙個半徑為50象素球:

1.var mysphere:sphere = new sphere();

跟flash裡一樣我們可以在把「顯示物件」放在顯示列表中之前先把它建立出來。為了讓這個「3d球」顯示出來我們還要用addchild方法把它加入「舞台」,如果我們用的是預設場景,我們會這樣做:

1.view.scene.addchild(mysphere);

假如我們要把球放到事先建立的場景裡我們會這麼做:

1. myscene.addchild(mysphere);

在away3d裡場景與其它3d物一樣,可以被移動、轉動、縮放等。如果你想刪除場景中的3d物,象flash裡刪除操作一樣你可以這麼做:

1. myscene.removechild(mysphere);

同時你也可以偵聽場景變化和滑鼠動作.偵聽與放棄偵聽與flash裡一樣:

1.myscene.addeventlistener(object3devent.scenechanged,somefunction);

2.myscene.removeeventlistener(object3devent.scenechanged,somefunction);

這些就是所有你對場景所要了解的內容,儘管很簡單.它就象是flash裡的舞台stage.

準備好了麼,下一節我們將學習:away3d裡的照相機camera

away3d顯示Plane(基礎 二)

我們直接說新增的 下面定義了乙個away3d自帶的幾何體plane也就是乙個 板子 var plane planegeometry new planegeometry 100,100 定義乙個plane,也就是乙個平面物件 var color colormaterial new colormater...

Away3D基礎5 3D基本元素(1)

在大多數3d軟體中,3d基本元素是構成3d世界的基石。away3d自帶有17種3d基本元素以及一些別的幫助物。本教程將解釋如何用這些3d基本元素實現非常酷的效果,比如 波形條 cmyk顏色分離等等。本教程同時會介紹away3d支援的兩種 書寫方式。首先,不要小看這些3d基本元素。它們可能很簡單,但它...

Away3D 實現場景中的倒計時

需求 需要在死亡人物處實現乙個3d的倒計時問題 如果用兩個以上的sprite3d實現,因為是billboard,總會有乙個視角是重疊的 var num0 int value 10 var num1 int value 10 bitmapdata new bitmapdata 64,32,true,0...