此消息也許對你有所啟發(fā),TSP-PSO下載 收藏√ [ 5 4 3 2 1 ] 所屬分類: matlab 開發(fā)工具: matlab 文件大小: 33 KB 上傳時間: 2009-06-13 下載次數(shù): 625 提 供 者: 灞堝媷 詳細(xì)說明:用混合粒子群算法求解TSP問題,自帶GUI界面,共有9中算法,可解決各種TSP問題,效果不錯。-Using hybrid particle swarm algorithm to solve TSP problems, bring their own GUI interface, a total of 9 in the algorithm, to resolve the various TSP problems, good results.
成都創(chuàng)新互聯(lián)公司技術(shù)團隊10余年來致力于為客戶提供成都做網(wǎng)站、網(wǎng)站設(shè)計、成都品牌網(wǎng)站建設(shè)、成都全網(wǎng)營銷、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過多年發(fā)展,公司擁有經(jīng)驗豐富的技術(shù)團隊,先后服務(wù)、推廣了數(shù)千家網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機構(gòu)單位。
[上傳源碼成為會員下載此文件] [成為VIP會員下載此文件]文件列表(點擊判斷是否您需要的文件,如果是垃圾請在下面評價投訴):
TSP-PSO
.......\bayg29.txt
.......\burma14.txt
.......\ch130.txt
.......\ch150.txt
.......\dist.m
.......\eil51.txt
.......\fbnum.m
.......\fitness.asv
.......\fitness.m
.......\gr96.txt
.......\hs_err_pid160.log
.......\hs_err_pid528.log
.......\Oliver30.txt
.......\pr226.txt
.......\pr76.txt
.......\PSO.asv
.......\PSO.fig
.......\PSO.m
ascend - 把自己提升到上一個平臺
bind 命令 {命令關(guān)鍵字} - 設(shè)置一鍵命令
clear - 清空控制臺
damage - 關(guān)閉或者開啟傷害 即無敵
descend - 把自己移動到下面一個的平臺
destroy [all] - 破壞當(dāng)前的東西(背包)
defuse [all] - 拆彈(拆除已經(jīng)點燃了的TNT炸藥)
diff - X
difficulty - 設(shè)置游戲難度
dropstore - 在身邊創(chuàng)建一個儲物柜
*drops - 開關(guān)物品掉落,關(guān)閉的話采礦打怪不掉東西。
dupe [all] - 復(fù)制東西
duplicate [all] - 復(fù)制手上的東西并丟出來
explode [范圍] - 設(shè)置一個地方爆炸(在自家慎用)
extinguish [all] - 熄滅周圍所有的火
ext [all] - 一樣是熄滅火
falldamage - 開關(guān)高空落下傷害
firedamage - 開關(guān)火的傷害
fly - 飛行模式
*freeze - 凍結(jié)怪物
give 物品 [數(shù)量] - 給一樣物品
goto 名字 - 去一個地方
grow [all] - 讓立即小麥成長
h [COMMAND] - 命令列表/幫助
heal - 補指定的血
health - 設(shè)置生命值
help [COMMAND] - 命令列表/幫助
home 回到出生點
i 物品代碼 [數(shù)量] - 刷東西
instantmine - 開關(guān)即時采礦(采礦無延遲)
item 物品代碼|物品名稱 [數(shù)量] [費用] 給玩家物品, 如果不指定則是最大的數(shù)量
itemname - 顯示當(dāng)前手上的物品名稱
itemstack 物品代碼 [數(shù)量] - 給玩家指定數(shù)量的物品
kill 自殺不解釋
jump - 瞬移到鼠標(biāo)所指的地方
killnpc [all] - 殺死周圍全部NPC 或者叫 殺了附近所有除自己外的活體生物
*light - 把光永久性關(guān)閉
listwaypoints - 列出所有路徑點
macro 文件名 {參數(shù)} - 允許運行宏
maxstack [物品ID|物品名稱|全部] [數(shù)量] - 最大的把某物品堆起來
*mobdamage - 怪物不會給你傷害
msg 消息 - 添加一個消息到控制臺
music [音量] - 播放音樂
noclip - 穿墻
p - 顯示當(dāng)前坐標(biāo)
pos 現(xiàn)在玩家的坐標(biāo)
reach - 玩家到指定地方
return - 傳送到之前傳送的地方
rem - 刪除指定路點
removedrops [all] - 刪掉地上物品
*rename - 修改命令名稱
replenish [all] - X
repair [all] - 修復(fù)當(dāng)前物品耐久
reset - 恢復(fù)默認(rèn)設(shè)置
s 名字 - Same as /set
search 關(guān)鍵詞 - 搜索物品名稱
set 名字 - 在這世界標(biāo)記一個路徑點
setjump [JUMP|reset] - 設(shè)置跳躍的高度 落地傷害和移動 1:1
setspawn [ ] 設(shè)置當(dāng)前位置 X軸 Y軸 Z軸
setspeed [速度|重置] - 設(shè)置移動速度
spawn [QTY] - 產(chǎn)生一個生物
spawnstack {NAME|ID|random} - 產(chǎn)生一個合體的怪物NPC
*superheat [all] - Turns items which are furnace-able into their furnaced form
t - Same as /tele
tele - 傳送到此坐標(biāo)
time [set|get|day|night [minute|hour|day [TIME]]] - 設(shè)置指定時間得到物品
timeschedule - 設(shè)定一段時間段,讓世界永遠保持在這段時間之間
unbind - 解除一個命令
useportal - 傳送到地獄
waterdamage - 開關(guān)潛水傷害
我的世界中指令(Command)是通過輸入特定文本字符串而激活的高級功能。通過按下T鍵喚出聊天窗口然后輸入對應(yīng)指令就可以使用了。常見的指令有召喚指令/summon、給予指令/give、傳送指令/tp等,本文整理了全部92條指令并匯總,歡迎查看。
我的世界指令代碼大全如下:
常用指令
召喚指令/summon
給予指令/give
傳送指令/tp
指令匯總
/?
/help的替代命令,提供命令使用幫助。
/ability
賦予或剝奪玩家的能力。
/advancement
添加、移除或查詢玩家的進度。
/alwaysday
/daylock的替代命令,鎖定或解鎖日夜循環(huán)。
/attribute
修改或查詢玩家和生物的屬性。
/ban
將玩家加入封禁列表。
/ban-ip
將IP地址加入封禁列表。
/banlist
顯示封禁列表。
/bossbar
修改或查詢Boss欄。
/camerashake
啟用鏡頭抖動效果。
/changesetting
更改一個正在運行的服務(wù)器的設(shè)置。
/clear
從玩家物品欄中刪除物品。
/clearspawnpoint
從世界中移除出生點。
/clone
將特定區(qū)域的方塊復(fù)制到另一處。
/connect
/wsserver的替代命令,連接至一個WebSocket服務(wù)器。
/damage
對指定實體造成傷害。
/data
允許玩家獲取、合并或是移除實體或方塊的NBT標(biāo)簽。
/datapack
控制加載的數(shù)據(jù)包。
/daylock
/alwaysday的替代命令,鎖定或解鎖日夜循環(huán)。
/debug
開始或結(jié)束調(diào)試會話。
/dedicatedwsserver
嘗試連接一個WebSocket服務(wù)器。
/defaultgamemode
更改默認(rèn)的游戲模式。
/deop
撤銷玩家的管理員權(quán)限。
/dialogue
打開一個玩家的NPC對話。
/difficulty
設(shè)置難度等級。
/effect
添加或移除狀態(tài)效果。
/enchant
附魔玩家的物品。
/event
用于觸發(fā)一個實體的事件。
/execute
更改執(zhí)行環(huán)境的情況下執(zhí)行另一條命令。
/experience
/xp的替代命令,給予玩家經(jīng)驗。
/fill
在某個區(qū)域填充特定方塊。
/fog
用于更改玩家當(dāng)前的霧設(shè)置。
/forceload
強制不斷加載區(qū)塊。
/function
運行一個函數(shù)。
/gamemode
更改玩家的游戲模式。
/gamerule
更改或查詢游戲規(guī)則。
/gametest
用于測試GameTest功能。
/give
給予玩家物品。
/help
/?的替代命令,提供命令使用幫助。
/immutableworld
設(shè)置世界的不可變狀態(tài)。
/item
用于修改方塊或?qū)嶓w的物品欄。
/jfr
開始或結(jié)束JFR分析。
/kick
將玩家踢出服務(wù)器。
/kill ?
清除實體(玩家、生物、掉落物等)。
/list ?
列出服務(wù)器中的玩家。
/locate ?
顯示最近的給定結(jié)構(gòu)、生物群系或興趣點的坐標(biāo)。
/loot ?
將指定的戰(zhàn)利品放入物品欄或世界。
/me ?
顯示一條關(guān)于自己的信息。
/mobevent ?
控制或查詢允許運行的生物事件。
/msg ?
/tell和/w的替代命令,向另一玩家發(fā)送私信。
/music ?
設(shè)置玩家是否能控制當(dāng)前播放的音樂。
/op ?
授予玩家管理員權(quán)限。
/ops ?
/permission的替代命令,重載并應(yīng)用權(quán)限。
/pardon ?
從封禁列表中移除玩家封禁項目。
/pardon-ip ?
從封禁列表中移除IP封禁項目。
/particle ?
創(chuàng)建粒子。
/perf ?
記錄并保存性能分析數(shù)據(jù)。
/permission ?
/ops的替代命令,重載并應(yīng)用權(quán)限。
/place ?
在滿足條件的指定位置放置一個已配置地物、拼圖或結(jié)構(gòu)。
/playanimation ?
運行一次特定動作。
/playsound ?
播放音效。
/publish ?
向局域網(wǎng)開放單人游戲世界。
/recipe ?
給予或剝奪合成配方。
/reload ?
從硬盤中重新加載戰(zhàn)利品表、進度和函數(shù)。
/remove ?
移除智能體。
/replaceitem ?
替換物品欄中的物品。
/ride
控制一個實體的騎行狀態(tài)。
/save
準(zhǔn)備備份,查詢其狀態(tài)或恢復(fù)。
/save-all
保存服務(wù)器世界狀態(tài)到硬盤。
/save-off
關(guān)閉服務(wù)器自動保存。
/save-on
開啟服務(wù)器自動保存。
/say
向多個玩家發(fā)送消息。
/schedule
安排函數(shù)在特定的游戲刻后運行。
/scoreboard
管理記分板的目標(biāo)、玩家和隊伍。
/seed
顯示世界種子。
/setblock
將方塊替換為其他方塊。
/setidletimeout
設(shè)置無操作玩家被踢出的延時。
/setmaxplayers
設(shè)置可加入游戲的玩家數(shù)量上限。
/setworldspawn
設(shè)置世界出生點。
/spawnpoint
設(shè)置一個玩家的出生地點。
/spectate
使一個處于旁觀模式的玩家旁觀一個實體。
/spreadplayers
將實體傳送到隨機位置。
/stop
關(guān)閉服務(wù)器。
/stopsound
停止音效。
/structure
無需結(jié)構(gòu)方塊即可保存和加載結(jié)構(gòu)。
/summon
生成一個實體。
/tag
修改實體的標(biāo)簽。
/team
修改隊伍。
/teammsg
/tm的替代命令,指定要發(fā)送給隊伍的消息。
/teleport
/tp的替代命令,傳送實體。
/tell
/msg和/w的替代命令,向另一個玩家發(fā)送私信。
/tellraw
向玩家顯示JSON消息。
/testfor
統(tǒng)計符合給定條件的實體。
/testforblock
檢測某方塊是否在某位置。
/testforblocks
檢測兩個區(qū)域中的方塊是否相同。
/tickingarea
添加、刪除或列出常加載區(qū)域。
/time
更改或查詢游戲中的世界時間。
/title
管理屏幕上的標(biāo)題。
/titleraw
使用JSON管理屏幕上的標(biāo)題。
/tm
/teammsg的替代命令,指定要發(fā)送給隊伍的消息。
/toggledownfall
切換天氣。
/tp
/teleport的替代命令,傳送實體。
/trigger
設(shè)置一個觸發(fā)器。
/volumearea
添加、刪除或列出功能域。
/w
/tell和/msg的替代命令,向另一玩家發(fā)送私信。
/wb
/worldbuilder的替代命令,給予能編輯受限制方塊的能力。
/weather
設(shè)置天氣。
/whitelist
管理服務(wù)器白名單。
/worldborder
管理世界邊界。
/worldbuilder
/wb的替代命令,給予能編輯受限制方塊的能力。
/wsserver
/connect的替代命令,連接至WebSocket服務(wù)器。
/xp
/experience的替代命令[僅Java版],增加或減少一個玩家的經(jīng)驗。
引 言
Java3DAPI是用來開發(fā)三維圖形和開發(fā)基于Web的3D應(yīng)用程序(applet)的編程接口.用于開發(fā)三維圖形軟件的3DAPI(OpenGL、Direct3D)都是基于攝像機模型的思想,即通過調(diào)整攝像機的參數(shù)來控制場景中的顯示對象,而Java3D則提出了一種新的基于視平臺的視模型和輸入設(shè)備模型的技術(shù)實現(xiàn)方案,即通過改變視平臺的位置、方向來瀏覽整個虛擬場景.它不僅提供了建造和操作三維幾何物體的高層構(gòu)造函數(shù),而且利用這些構(gòu)造函數(shù)還可以建造復(fù)雜程度各異的虛擬場景,這些虛擬場景大到宇宙天體,小到微觀粒子.
Java3D是JavaMediaAPIs中的一部分,可廣泛地應(yīng)用于各種平臺,而且用Java3DAPI開發(fā)的應(yīng)用程序和基于Web的3D小應(yīng)用程序(applet),還可以訪問整個Java類,且可以與Internet很好地集成,即如果在瀏覽器中安裝了Java3D的瀏覽插件,在網(wǎng)上也可瀏覽Java3D所創(chuàng)建的虛擬場景.Java3DAPI還汲取了已有圖形APIs的優(yōu)點,即Java3D的底層圖形構(gòu)造函數(shù)不僅綜合了底層APIs(Direcrt3D、OpenGL)最好的繪制思想,而且它的高層圖形繪制還綜合了基于場景圖的思想,同時,它又引入了一些通用的圖形環(huán)境所未考慮的新概念(如3D立體聲),這樣將有助于提高用戶在虛擬場景的沉浸感.本文將著重介紹Java3D針對VR應(yīng)用所提出的基于視模型和輸入設(shè)備模型的新思想,在此基礎(chǔ)上又討論了如何利用Java3D來開發(fā)VR應(yīng)用程序及其實現(xiàn)方法,并設(shè)計實現(xiàn)了一個應(yīng)用實例.
1.適于VR應(yīng)用開發(fā)的Java3DAPI眾所周知,開發(fā)VR應(yīng)用程序是一件很繁瑣的工作,其開發(fā)人員必須編寫應(yīng)用程序可能遇到的各種輸入和顯示設(shè)備的接口程序,或者依賴專為VR應(yīng)用開發(fā)而設(shè)計的應(yīng)用程序編程接口(API),且典型的VR應(yīng)用必須跟蹤用戶的頭部位置和方向,以生成與頭部位置方向相一致的虛擬場景圖.
另外,還需要先跟蹤身體的其它部位(手、臂或腿部),然后通過身體各部位在虛擬場景中的虛擬視點與場景中的對象進行交互,而應(yīng)用程序也必須具有能夠利用跟蹤輸入設(shè)備在視點內(nèi)放置物體,并標(biāo)明其在生成的三維圖象中的位置和方向的功能.同時,面向VR的應(yīng)用程序開發(fā)接口(API)必須能支持3D圖形生成、處理跟蹤器的輸入,并能將跟蹤信息反饋到圖形繪制中.
Java3DAPI可自動將頭部跟蹤器的輸入集成到圖形生成中,并具有通過訪問其它跟蹤器信息來控制其它特征的功能,但它是通過一種新的視模型(viewmodel)技術(shù)來實現(xiàn)的.該視模型是將用戶真實的物質(zhì)環(huán)境與計算機生成的虛擬環(huán)境相互獨立,并建立它們之間的通信橋梁.該API也明確定義了用來探測Java3D物體六自由度(6DOF)傳感器的返回值,并將其應(yīng)用于顯示場景圖中.總之,這種新的視模型和輸入設(shè)備模型可以很方便地將交互式的3D圖形應(yīng)用程序轉(zhuǎn)化為VR應(yīng)用程序.
Java3D視模型
2.1 新的視模型概念(viewmodel)基于攝像機的視模型是模仿虛擬環(huán)境中的攝像機,而不是虛擬環(huán)境中人的“替身”,而且它是通過控制攝像機與視點的相關(guān)參數(shù)來控制所顯示的場景,但這種方法,在用戶物質(zhì)環(huán)境確定某些視參數(shù)的系統(tǒng)中是不合理的,例如在頭盔顯示器(HMD)系統(tǒng)中,HMD的光學(xué)性能就直接確定了應(yīng)用程序所顯示的視域.由于不同的HMD有不同的光學(xué)特性,因此如果允許終端用戶隨意改變光學(xué)參數(shù)顯然是不合理的.這里視參數(shù)的值將隨終端用戶物質(zhì)環(huán)境的不同而不同,而影響視參數(shù)的主要因素有顯示器大小、顯示器的位置(戴在頭上,還是放在桌子上)、三維空間中用戶的頭部位置、頭盔顯示器的實際顯示視域、每英寸的顯示象素等.由于Java3D的視模型直接提供了頭部跟蹤的功能,因而使用戶產(chǎn)生了真實存在于虛擬環(huán)境中的錯覺.
Java3D不僅提出了新的基于視平臺的視模型概念,同時將其推廣到包括顯示設(shè)備和6DOF外圍輸入設(shè)備(如頭部跟蹤器等)的接口支持中,而且新的視模型繼承了Java的“writeonce,vieweverywhere”本質(zhì).這意味著由Java3D視模型開發(fā)的應(yīng)用程序或applet可廣泛地應(yīng)用于各種顯示環(huán)境.這種顯示環(huán)境可以是標(biāo)準(zhǔn)的計算機顯示屏、多元顯示空間,也可以是頭盔顯示器.Java3D視模型是通過將虛擬環(huán)境和物質(zhì)環(huán)境完全獨立的方式來實現(xiàn)上述功能的,且該視模型可將虛擬環(huán)境中視平臺的位置、方向和大小,與Java3D繪制的與視平臺位置、方向相一致的虛擬場景相區(qū)分.一般應(yīng)用程序控制視平臺的位置和方向,而繪制著色系統(tǒng)則依據(jù)終端用戶的物質(zhì)環(huán)境以及用戶在物質(zhì)環(huán)境中的位置和方向來確定顯示場景.
2.2 視模型的組成
Java3D視模型由虛擬環(huán)境和物質(zhì)環(huán)境兩部分組成,其中,虛擬環(huán)境由ViewPlatform對象來表示,它是虛擬對象存在的空間;而物質(zhì)環(huán)境則由View對象以及和它相關(guān)的對象來表示.這里,View對象和它的相關(guān)對象就描述了用戶所處的顯示和操縱輸入設(shè)備環(huán)境.雖然視模型將虛擬環(huán)境和物質(zhì)環(huán)境相互獨立,但可通過一一對應(yīng)關(guān)系來建立兩種世界之間相互通信的橋梁,這樣將使得終端用戶的行為會影響虛擬環(huán)境中的對象,同時虛擬環(huán)境中的對象行為也會影響終端用戶的視點.
Java3D可通過幾個對象來定義視模型參數(shù).這些對象包括View對象及其相關(guān)對象、PhysicalBody對象、Canvas3D對象、PhysicalEnvironment對象、Screen3D對象.視模型相關(guān)的對象(如圖1所示)其作用如下:ViewPlatform用來標(biāo)志場景圖中視點位置的節(jié)點.其父節(jié)點則指明了視平臺在虛擬環(huán)境中的位置、方向和大小.View用于指定需要處理場景圖的信息.Canvas3D定義了Java3D繪制圖象的窗口,它提供了Canvas3D在Screen3D對象中的大小、形狀和位置信息.Screen3D用于描述顯示屏幕的物理屬性.PhysicalBody用于封裝那些與物質(zhì)體相關(guān)的參視模型的組成及其相互關(guān)系數(shù)(如左、右眼的位置等).PhysicalEnvironment用于封裝那些與物質(zhì)體環(huán)境相關(guān)的參數(shù)(如,用于頭狀物體或頭盔式跟蹤器的校驗信息).
2.3 虛擬環(huán)境中的視平臺(ViewPlatform)
鑒于視平臺定義了一坐標(biāo)系統(tǒng),于是虛擬環(huán)境中的原始點和參考點就有了一參考坐標(biāo)系.這里視平臺代表與視對象相關(guān)的一個點,并充當(dāng)確定繪制圖象的基礎(chǔ).圖2顯示了包括視平臺節(jié)點場景圖的一部分.由圖2可見,視平臺的父節(jié)點確定了視平臺在虛擬環(huán)境中的位置和方向.若通過修改與TransformGroup節(jié)點相關(guān)的Transform3D對象,就可以在虛擬場景中隨意移動視平臺.雖然虛擬環(huán)境中可以有許多不同的視平臺,但特定的視對象只能與一個視平臺相關(guān)聯(lián),于是在Canvas3D對象中所繪制的場景均來自于一個視平臺的視點.這樣應(yīng)用程序就可通過修改視平臺的TransformGroup節(jié)點,在虛擬環(huán)境中漫游.圖2 包括視平臺的局部場景圖3 Java3D的輸入設(shè)備模型Java3D除了支持通用的鍵盤、鼠標(biāo)輸入外,還能給各種不間斷的輸入設(shè)備,如6DOF跟蹤設(shè)備和操縱桿提供支持.由于不同的跟蹤輸入設(shè)備其工作原理不同,因而計算機與其交互的方式也不同.為了給不同的6DOF輸入設(shè)備提供支持,Java3D還提供了一個輸入設(shè)備接口,而且該輸入設(shè)備接口還定義了一個抽象的輸入設(shè)備,雖然用其可以實現(xiàn)對一特定設(shè)備的驅(qū)動,但輸入設(shè)備接口的實現(xiàn)必須實現(xiàn)接口所定義的所有方法(如設(shè)備開、關(guān)、讀取操作、狀態(tài)設(shè)置及查詢等).Java3D的輸入設(shè)備列表就用這些方法同特定的設(shè)備進行交互.
一般Java3D環(huán)境中,可能包括許多輸入設(shè)備,而且這些輸入設(shè)備不一定是實際的物理設(shè)備,也可能是虛擬設(shè)備,例如通過軟件的方法將鼠標(biāo)的運動參數(shù)轉(zhuǎn)化為6DOF虛擬跟蹤球的參數(shù),來模擬虛擬跟蹤球的輸入.由于所有的輸入設(shè)備都由許多傳感器對象組成,因此每一種輸入設(shè)備都與一定數(shù)量的傳感器對象相關(guān),且每一種傳感器都與其傳感器設(shè)備6DOF數(shù)據(jù)的一個數(shù)據(jù)源相關(guān).當(dāng)輸入設(shè)備驅(qū)動的數(shù)據(jù)改變時,傳感器對象的數(shù)據(jù)也會相應(yīng)改變,而且傳感器對象由讀取傳感器對象組成.由于緩沖區(qū)中記錄了各傳感器N個讀取傳感器對象的值,因此可以對傳感器數(shù)據(jù)進行平均,以及對傳感器輸入值的趨勢進行預(yù)測等處理,但應(yīng)用程序的開發(fā)并不直接使用輸入設(shè)備.Java3D是通過一個傳感器數(shù)組將輸入設(shè)備抽象化,傳感器對象數(shù)組是物質(zhì)環(huán)境對象的一個子類,該數(shù)組是由與輸入設(shè)備相關(guān)的對象指針組成.Java程序可以直接從傳感器數(shù)組中獲取傳感器的值,并將其用到場景圖中,或按任意方式對其進行處理。
2.4 用Java3D開發(fā)VR應(yīng)用程序利用
Java3D開發(fā)的VR應(yīng)用程序或者applets程序,可建造一個虛擬場景,并能將一個或多個場景圖插入到虛擬場景中,虛擬場景由超結(jié)構(gòu)對象集組成,對象集則包括一個世界對象(Universeobject)、一個或多個場所對象(Localeobjects)和按樹狀結(jié)構(gòu)排列的由節(jié)點物體組成的一個或多個場景圖(Scenegraphs).該場景圖又稱為分枝圖(Branchgraph),它包括繪制對象節(jié)點、光照節(jié)點、行為節(jié)點和聲音節(jié)點等,其中,包含內(nèi)容節(jié)點的分枝圖稱為內(nèi)容分枝,包含視平臺對象的分枝圖稱為視分枝,視平臺對象用來確定用戶的位置和方向.圖3表示了具有多分枝圖的Java3D場景.圖3 應(yīng)用程序場景圖由于這種分枝圖只描述了場景所要繪制的對象,并不確定對象的繪制次序,因此圖中節(jié)點的次序和位置與對象的繪制次序無關(guān),而圖中的父節(jié)點和子節(jié)點的直線路徑就唯一確定了子節(jié)點的圖形范圍.由于繪制次序的不確定性,因而使得Java3D能橫越場景圖的任何次序,且它能從左到右,從頂部到底部穿過場景圖;或者從右到左,甚至并行遍歷整個場景圖.Java3D的分支圖為樹狀結(jié)構(gòu),且圖中的每一個節(jié)點只有一個父節(jié)點.這樣通過輔助的場景圖機制就可以實現(xiàn)通用場景圖的共享,而且具有連接屬性的葉節(jié)點可以連接到共享子圖.分枝圖中的節(jié)點分為群節(jié)點(groupnode)和葉節(jié)點(leafnode)兩類,其中,群節(jié)點按照粘貼的原理來組織場景圖單元。
群節(jié)點的層次結(jié)構(gòu)圖一般群節(jié)點包括:BranchGroup、TransformGroup、Switch、OrderGroup、DecalGroup和ShareGroup節(jié)點,其中,BranchGroup是分枝圖的根節(jié)點;而TransformGroup用來指明所有子節(jié)點的位置和方向;Switch則用于實現(xiàn)一個或多個子圖的轉(zhuǎn)換;OrderGroup用于使它的子節(jié)點按照特定的次序繪制;DecalGroup是OrderGroup的一個子集;ShareGroup跟BranchGroup一樣,是一個場景圖的根節(jié)點.雖然共享圖作為Java3D場景圖的一部分從不直接出現(xiàn),但是連接節(jié)點可以引用.另外群節(jié)點還可以包含各種子節(jié)點以及所包含對象的群節(jié)點或葉節(jié)點.這些子節(jié)點用一個關(guān)聯(lián)索引屬性來允許對特定的子節(jié)點進行操作.如果沒有指明特定的順序群節(jié)點,Java3D還可以按照任意指定的順序來繪制群節(jié)點的子節(jié)點.雖然葉節(jié)點是場景圖的抽象類,它沒有子節(jié)點,但葉節(jié)點包括了Java3D的各種信息.葉節(jié)點由Shape3D、ViewPlatform、Sound、Light以及用戶定義的行為節(jié)點等組成,Shape3D和ViewPlatform節(jié)點在Java3D的視模型和輸入模型中扮演著重要的角色,因為它描述了圖形系統(tǒng)的兩個重要方面,其中,Shape3D描述了場景中對象的幾何形狀,而ViewPlatform則標(biāo)定了用戶或其視點在虛擬環(huán)境中的方向或位置.
另外,應(yīng)用程序還可像操縱分枝圖中的任意對象一樣,來操縱ViewPlatform,而且應(yīng)用程序還可平移、旋轉(zhuǎn)和縮放ViewPlatform,即通過改變ViewPlatform的位置和方向,ViewPlatform將隨同用戶的視點一起移動,來瀏覽整個虛擬環(huán)境.雖然ViewPlatform是按照事先規(guī)定的路線瀏覽場景,但不會限制用戶視點的移動和向不同方向瀏覽場景.