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

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

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