羅建華
摘 要:文章主要從場景數據、LOD算法、VRML場景淺談Java3D虛擬場景的關鍵技術,并簡要分析場景數據、LOD算法、VRML場景的一些缺點及改進方法。
關鍵詞:Java3D虛擬場景;場景數據;LOD算法;VRML場景
隨著信息技術和網絡技術的發展,三維虛擬場景技術將人類的交流帶入了新的領域,人們在三維虛擬場景中會產生身臨其境的感覺。三維虛擬場景技術高度融合了人工智能、計算機、通信、熱學、數學、機械、心理學和社會學學等多個方面的科學知識和學科知識。文章就Java3D虛擬場景的關鍵技術進行簡要說明。
1 場景數據存取
1.1 傳統場景數據存取存在的問題
當前的Java3D API不具將Java3D場景圖直接寫入文件中的功能,而且JAVA3D數據存取序列化也具備Java3d的場景圖對象,導致Java3d的場景數據只能采用即時存取的方式,而不能直接將場景數據作為可以直接保存的序列流。但是在即時存取方式下,只有在創建期間才能修改或者訪問的Java3dAPI的場景圖對象,Java3api被編輯或瀏覽,則無法保存場景圖對象。這一特點導致在通過重復原先操作才再次生成編輯得到的場景,編輯后的場景不能作為成品被保存或者調用,這一缺點給用戶實際應用過程中帶來許多麻煩。
1.2 場景數據存取優化措施
如果Java3d場景圖可以作為序列直流直接保存,則可以很好的解決以上問題。為實現Java3d數據的序列化存取,在對具體三維場景的Java3d結構做封裝操作是采用自定義的Java對象進行分裝Java對象的數據僅包含三維場景的數據,而在實例化調用Java3d場景對象中,只有在Java3D方法中才實施實例化調用。這種做法將三維場景的序列化只對Java對象的數據文件成員才起作用,從而可以達到Java3D場景對象支持Java的數據存取序列化。
2 LOD算法
2.1 傳統LOD算法的弊端
細節層次模型LOD是一種既可以降低場景復雜度,又可以提高圖形實時顯示速度的有效方法。但是傳統LOD算法也具有很明顯的缺點。按照傳統的LOD思路,由于物體視距存在差異,需要建立多個LOD模型。在構建含物體的數量龐大的場景中,在場景內的物體都需要滿足視距變化以及實施運算,則需要在場景中建立多級模型,導致LOD模型的數量更為龐大[1]。龐大的LOD數量模型不僅會導致代碼量的增大,而且多于的物體多級模型也需要在網絡傳輸中占用寬帶,造成網絡擁擠。
2.2 LOD算法的改進
通過研究可以發現,相鄰兩級LOD模型代碼中的大部分數據具有一致性,知識相鄰兩級LOD模型之間至有部分細節數據代碼的差別。即在視點能夠分辨物體輪廓至逐漸逼近物體模型的過程,相鄰兩級LOD模型代碼之間為逐漸增加的關系。相鄰兩級LOD模型代碼中相同的部分數據只在其中一個LOD模型中保留,而不知兩個LOD模型中都保留,并且在每次視點靠近一級就多現實一些模型細節。依照上述思路進行模型設計,只要建立一個LOD模型并且顯示相關細節分析即可,就可以有效避免針對同一物體建立不同的LOD模型,以表明數據代碼重復多余。而且傳統LOD算法下圖像跳變與LOD模型過多導致的數據矛盾有問題也可以得到有效的解決,其原因在于改良的LOD算法中的LOD模型內部層次更加細化,LOD切換時的變化更少,對圖像跳變的影響也更小。而且改良的LOD算法在JAVA3d中可得到很好的實現。依據Java3D的語法,雖然JAVA3d代碼將模型封裝成類,并且無法改動。但是為了提高JAVA3d的交互性,JAVA3D的語法中也包含了CAPABILITY命令,該命令實現了用戶輸入或其它控制操作可以改變渲染過程中物體的變換和物體大小、形狀、顏色等方面變動[2]。此外,該方式還可以實現調用和限制已封裝編譯的模型,從而達到在不增加多于數據代碼的基礎上分層次地顯示物體模型的目的。
3 VRML場景
3.1 VRML場景的缺點
VRML(虛擬顯現實造型語言,Virtual Reality Modeling Language)多用于實現網頁中的三維動畫效果以及用戶交互。VRML存在一些嚴重的缺陷。VRML作為一種標記語言,VRML的語言能力可以通過腳本語言的方式得到增強,但是VRML無法對文件系統操作的應用,不能訪問本地數據,也不具備在本地磁盤上進行寫數據操作的能力。此外,VRML文件只能同時表示單一的場景圖,如果用戶需要進行修改場景圖操作,必須通過修改VRML源文件方式才能實現。如果某一個VRML文件處于加載狀態,而某個場景由該VRML文件定義為初始狀態,用戶對VRML的操作必然會改變場景圖,但是VRML不具備存盤功能,因而場景在改變后也會丟失。當重新加載文件時,場景又會恢復到初始狀態。最后,瀏覽VRML文件的瀏覽器必須滿足已安裝插件的要求,這一要求導致用戶的體驗極為麻煩。
3.2 VRML場景的調用
如果采用VRML描述虛擬場景,并且使用Java3D編寫應用程序,要實現對VRML場景中對象的操作,必須將VRML描述的節點對象轉換為JAVA3D對象,將使用Java3d場景圖的組織結構將經Java3d轉換后的節點組織起來,再依據常規JAVA3d程序逐一添加功能。與之對應的VRML文件則被解析和轉換成一系列的JAVA3D的Shape3D節點對象,并且被加入TransformGroup組中。依照以上操作即可實現在JAVA3D中調用VRML場景。
[參考文獻]
[1]季婷.基于Java3D的LOD算法的研究與優化[J].天津職業院校聯合學報.2013,(02).
[2]袁劍鋒.VRML與Java 3D轉換關鍵技術的研究[J].計算機與現代化.2010,(09).