Posted on 2007-11-05 21:43
ZelluX 閱讀(2413)
評論(1) 編輯 收藏 所屬分類:
OOP
要做個和Java3D有關(guān)的項目,需要稍微了解下相關(guān)的知識。
看的資料是The Java3d Tutorial,版本有點(diǎn)早,湊合著看了。
Java 3D 的虛擬環(huán)境是從場景圖(scene graph)中建立的,場景圖聚合(assemble)了各種定義幾何、聲音、光、位置、方位等元素的類。
一種常用的定義圖的數(shù)據(jù)結(jié)構(gòu)由結(jié)點(diǎn)(node)和弧(arc)組成。結(jié)點(diǎn)都是Java 3D類的實(shí)例,而弧則代表了實(shí)例間兩種不同的關(guān)系。
最常見的關(guān)系是父子(parent-child)關(guān)系。一個組結(jié)點(diǎn)(group node)可以包含任意多的子結(jié)點(diǎn),但只能有一個父結(jié)點(diǎn)。
另一種關(guān)系是引用(reference),引用通過一個場景圖的結(jié)點(diǎn)關(guān)聯(lián)了一個NodeComponent類,NodeComponent類定義了各種視圖對象的幾何和外觀屬性。
這種結(jié)構(gòu)可以用樹來描述,從根結(jié)點(diǎn)到任一葉子結(jié)點(diǎn)的路成為場景圖路徑(scene graph path). 每條路徑都完整地描述了它的葉子結(jié)點(diǎn)的狀態(tài)。

這就是一個簡單的場景圖的結(jié)構(gòu),其中包括VisualUniverse Locale GroupNode Leaf 等元素
每個場景圖都有單一的VirtualUniverse,后者包含一串Locale對象。一個程序可以包含多個VirtualUniverse對象,但是沒有一種簡單的方法實(shí)現(xiàn)它們相互之間的通信。
寫Java3D程序的通常步驟:
1. 創(chuàng)建一個Canvas3D對象
2. 創(chuàng)建一個VirtualUniverse對象
3. 創(chuàng)建一個Locale對象,將其與VirtualUniverse相關(guān)聯(lián)
4. 構(gòu)造視圖分支(view branch graph):分別創(chuàng)建一個View ViewPlatform PhysicalBody PhysicalEnvironment對象,將后面三個及Canvas3D與View對象關(guān)聯(lián)
5. 構(gòu)造內(nèi)容分支(content branch graph)
6. 編譯(compile)各個分支
7. 將子圖(subgraph)插入Locale中
使用SimpleUniverse可以簡化這些步驟

虛線框起來的部分就是SimpleUniverse中提供的內(nèi)容
通過它可以將步驟簡化為
1. 創(chuàng)建一個Canvas3D對象
2. 創(chuàng)建一個引用了之前的Canvas3D對象的SimpleUniverse類,并定制該類
3. 構(gòu)造一個內(nèi)容分支,編譯后插入SimpleUniverse的Locale
什么是編譯(compile):通過編譯BranchGroup,可以將它及其祖先轉(zhuǎn)換為一種更高效的實(shí)現(xiàn)方式。建議在最后一步中做編譯。