五邑大學計算機學院 王 準 袁承武
隨著虛擬現實技術和互聯網的發展,基于互聯網的虛擬現實慢慢進入人們的視野。人們通過互聯網,足不出戶就可以游覽逼真度很高的虛擬博物館、虛擬城市等虛擬現實場景。
網絡虛擬現實技術主要靠虛擬現實建模語言(Virtual Reality Modeling Language,VRML)來實現,VRML拓寬了虛擬現實技術的應用領域。面對越來越多的需求,VRML逐漸暴露出如不支持XML編碼,交互性差等缺點。于是X3D[1](Extensible 3D)標準應運而生,X3D是VRML的繼承和發展。
針對傳統汽車導購網站以二維圖片形式展示的弊端,本文利用新的X3D標準來設計的展示系統能夠使瀏覽者仿佛置身于真實車展當中,充分體現虛擬現實的沉浸性、交互性。
X3D整體結構[2]包括核心特性集、VRML97特性集、應用程序接口和擴展集四個部分。(1)核心特征集:定義了VRML97的54個節點中最為關鍵的23個節點,形成核心組件,并將其封裝為一個小型的、可擴展的內核,運行時占用很少的系統資源;(2)VRML97特征集:將內核以外的VRML97節點設計為可拔插的組件,通過擴展內核,完整地實現了VRML97規范定義的功能,從而確保了X3D與已有的VRML應用兼容;(3)應用程序接口:X3D是描述幾何體行為的一種文件格式,由于使用了XML編碼,文檔對象模型為X3D提供了一組應用程序接口,外部應用程序可以通過DOM訪問X3D文件節點元素;(4)擴展集:在內核之上進行特性集擴展,用戶可以添加其他的擴展或自定義新的硬件渲染技術,以實現復雜的功能。
整個系統的虛擬場景有許多的X3D文件組成,X3D文件結構[3]包含文件頭、文件體及注釋等內容,在主程序概貌中包括頭文檔、組件、說明以及場景等。在場景中利用基本幾何節點、復雜節點、組節點、紋理節點、效果節點、組件節點、人性化節點以及動態感知節點等創建虛擬現實三維立體場景。
系統前臺的三維呈現采用與瀏覽器完美兼容的BS Contact引擎,BS Contact引擎對X3D擴展節點提供了很好的支持。BS Contact為JavaScript提供了一個EAI(External Scripting interface)外部編程接口,這個接口允許外部程序JavaScript讀取和改變X3D內部已被命名節點的任何域的值。
系統承載容器選用流行的Tomcat服務器,數據的處理將使用SQL Server 2005數據庫。
虛擬展示系統采用客戶端層、中間件層及數據庫層三層架構模式,客戶端層負責接收用戶點擊事件及三維場景顯示,中間件層根據不同請求將從數據庫層獲取的相應信息返回給客戶端層。圖1為系統的架構示意圖。
需要采集的數據包括汽車三視圖、汽車各項性能參數信息、場景及汽車零部件貼圖。三視圖用于汽車的建模參考,貼圖則用于增加場景真實感,性能參數信息使用戶了解汽車模型無法表現的性能信息。這些數據由JSP采集頁面收集并傳遞給服務器的servlet,在servlet中通過JDBC代碼將數據保存到數據庫中。
系統提供車型查詢功能,用戶可以從數據庫中查詢出自己想了解的汽車產品的型號在客戶端里面察看,同時也可以在展廳里同時查詢出兩種車型進行對比展示,使用戶對兩款汽車有更直觀的認識和了解。
實現查詢原理是當用戶針對不同車型發起請求時,服務器負責查詢的servlet將從數據庫中獲取相應的數據返回給客戶端瀏覽器,相應JSP頁面展現給用戶所需信息。
3D Studio Max,常簡稱為3ds Max或MAX,是Autodesk公司開發的基于PC系統的三維動畫渲染和制作軟件。廣泛應用于廣告、影視、工業設計、建筑設計、多媒體制作、游戲、輔助教學以及工程可視化等領域。系統場景由大量三維實體模型組成,主要有汽車、展廳及內部裝飾、山地、小型城鎮等,所以系統中汽車、展廳等復雜的物體采用強大的3DS MAX工具來建模。
模型需要轉換為X3D格式的文件,由于3DS MAX對X3D不支持復雜材質的導出,所以導出的X3D模型文件需要使用X3D標準提供的材質節點進行處理,例如為模型增加貼圖、光澤度、燈光等使場景更加逼真。模型建好之后使用X3D的Inline節點將其組合到場景中。X3D的另一個作用是在場景中添加對一些用戶點擊事件的處理節點、完成一些模型的移入和移出動作、對場景及模型進行細節的調整。圖2、3為場景效果圖。
本系統各種交互事件主要靠X3D的內部Script節點[4]來完成。
內部Script節點是一個特殊的可編程節點,它不能直接感應用戶的操作,在三維空間中也不可見,但可以嵌套為模型節點的下級子節點并可與任意節點進行連接。當Script節點收到一個輸入事件時,首先將事件值傳到URL指定的文件中,通過這個腳本設置該Script節點輸出事件的值。在編寫用戶自定義腳本和設定虛擬模型的傳感事件時,Script節點的輸入、輸出域和其他感受器節點的輸入、輸出域的數據類型必須嚴格匹配[5]。
JSP頁面腳本程序與場景交互的一般步驟是首先在腳本程序獲取瀏覽器對象,通過瀏覽器對象加載場景;然后通過瀏覽器對象訪問場景對象;其次由場景對象訪問節點對象;最后由節點訪問域對象,包括設置域值、監聽事件等。
圖4、5分別為交互原理圖和內部Script節點交互測試用例,用戶通過點擊JSP頁面控件來改變虛擬場景。例如,改變場景中物體的顏色、顯示或隱藏物體、旋轉物體等效果。
系統采用同樣的原理來對虛擬展廳和虛擬試車場進行控制。例如改變展廳汽車的角度、改變漫游路線和視角等。
X3D標準作為新一代Web三維圖形的標準,基于它制作的虛擬場景文件體積小,交互功能強大,且具有平臺無關性,其發展前景廣闊。本文構建的網絡虛擬汽車展示系統除實現了基本的汽車展示功能外,還利用X3D的內部節點功能完成系統的交互功能。系統真實感還有待增強,是下一步需要完善的重點工作。
[1]ISO/IEC FDIS 19775-1.2:2008 Information technology-Computer graphics,image processing and environmental representation-Extensible 3D(X3D)-Part 1:Architecture and base components[S].2008.
[2]劉廣濤,吳升.基于X3D的場景交互技術在虛擬生物博物館中的應用.系統仿真學報,2008,20:348-351.
[3]Web3D Consortium.Introduction[EB/OL].(2007-12).http://www.web3d.org/x3d/specifications/ISO-IECFDIS-19775-1.2-X3D-Abstract-Specification/Part01/introduction.html.
[4]李海慶,殷國富,胡瑞飛.基于X3D的虛擬場景交互架構的實現方法研究[J].系統仿真學報,2006,18(2):383-385.
[5]黃正軍,周建中.基于X3D的虛擬場景動態交互技術研究[J].計算機工程與科學,2007,29(7):55-57.