摘要:介紹利用Java3D技術,構建一個基于Web的三維交互系統,實現與用戶進行交互,并給出了部分實現細節。
關鍵詞:Java3D;交互;Web 3D;場景
中圖分類號:TP319文獻標識碼:A文章編號:1009-3044(2008)19-30036-03
Design and Implement of 3D Interactive System Based on Web
WEN Kai-feng
(Jiaying University, Meizhou 514015, China)
Abstract: This paper introduce on the use of Java3D technology, to build a three-dimensional interactive system based on Web, which can interact with the users, and implement a part of detail
Key words: Java3D; Interactive; Web3D; Scene
1 引言
隨著網絡技術及計算機硬件技術的飛速發展,網絡的帶寬和計算機高效的3D運算能力的提高,虛擬現實技術在互聯網上的應用成為了新的熱點。Web 3D技術的目的正是在互聯網上建立三維的虛擬世界,給網上沖浪者提供真實的視聽感受,使之在互聯網上感覺到就如真實的世界一樣,從而產生身臨其境感覺。本文主要討論利用Java 3D技術,構建一個基于Web的三維交互系統,實現與用戶進行交互,使用戶充分享受Web 3D技術所帶來的感受。
2 Java3D技術
Web 3D標準的研究、定義和推廣,主要是由Web 3D聯盟組織來完成的。其推出的VRML97是3D圖形和多媒體技術通用的交換文件的格式。雖然VRML在Web 3D方面的應用比較廣泛了,但也存在著很多的不足:比如用戶需要等待較長時間下載瀏覽器插件;必須借助其他的可視化編程工具來表現復雜場景;畫面不連續,圖像質量不高;軟件實現受制等問題,這些問題都阻礙了基于Web的交互式三維圖形技術的發展和應用。因此,許多公司推出了自己的Web 3D實現方案,比如Cult 3D、Viewpoint、Atmosphere、Shockwave 3D、Pulse 3D等使用專用的文件格式和瀏覽器插件。這些軟件各具特色,在渲染速度、交互性、造型技術、圖像質量和數據的壓縮與優化上都各有特長。Sun公司發布的Java3D由于其平臺無關性、不需要安裝插件等特性,使其特別適合編寫基于WEB的應用程序。
Java語言是一種高效、健壯、安全的編程語言,特別適合Internet開發。作為Java語言在三維領域的擴展,Java3D繼承了Java語言“Write once,Run anywhere”和強大的網絡功能等特點,即使是非常大的三維模型文件也可以很快的從網上下載觀看,避免了帶寬瓶頸,很好地解決了網絡傳輸、平臺無關性的三維可視化問題。Java 3D底層通過OpenGL或DirectX實現3D硬件加速,并且使用了視錐體消除法處理技術,同時采用多線程,實現了速度的最優化。Java3D提供了高層的面向對象的三維圖形描述方法,程序員只需要集中精力組建場景圖中的對象而不必設計具體的幾何形體和編寫描述代碼。因此,Java3D在實現計算過程的三維可視化, 復雜的交互功能等方面具有其他Web3D技術無法相比的能力,選用Java3D 作為基于網絡的虛擬建筑環境的開發平臺, 有助于在應用中不斷采用更為先進的算法, 形成獨立的技術核心。同時,Java本身是一種編程語言,所以通過Java3D建立的三維交互環境應用不會涉及商業類技術問題,比采用其他商業Web3D技術具有更長期的效益。基于以上原因,我們在開發基于Web的三維交互設計系統中采用了Java3D技術。
3 系統的設計與實現
根據系統的特點和需求,本系統采用Client/Server 結構,數據庫放在服務器端,使用了My Sql保存用戶的基本信息,管理用戶的權限等。服務器端提供了基本三維圖形的下載及客戶上傳文件的功能,主要采用了Java文件上傳和JDBC技術。服務器端程序和客戶端程序通過HTTP連接作為服務器和客戶端的數據交互接口。客戶端通過網絡連接到服務器,與服務器建立連接后,服務器端根據客戶端的請求進行數據處理,并把客戶端所需的3D文件通過網絡傳送到客戶端,在客戶端以網頁的形式顯示出來。然后用戶在客戶端上對3D文件進行相關操作(包括文件操作、數據庫操作和場景圖操作),操作完成以后,把修改后的數據再通過網絡返回到服務器中,服務器對更新結果進行保存,以供下次用戶的調用。
客戶端則提供了圖形數據的還原和編輯圖形的功能,采用了Java Applet的方式,Java Applet可嵌在網頁上運行的特性和Java3D強大的圖形表現能力為“基于Web的三維交互設計系統”提供了有力的技術支持。用戶通過瀏覽網頁的形式,對從服務器端傳送過來的圖形數據進行還原,同時,根據需要在客戶端對圖形進行修改和編輯,并將結果通過網絡傳回給服務器保存,達到交互設計的目的。在數據調度策略方面本系統采用一次性全部裝載三維格式文件數據,數據駐留客戶端機器內存的方法,節約了傳送的代價,減輕了服務器端的壓力,加快了客戶端的反應速度。以下為系統的處理流程和數據流程圖:
■
圖1 系統的處理流程和數據流程圖
由以上系統的處理流程,結合Web3D技術的特點,系統分為:場景圖操作子系統(主要用于場景圖的載入、模型的相關操作)、實體增添子系統(主要用于添加一些實體到系統中)、實體編輯子系統(對實體進行外觀編輯和幾何編輯)、文件操作子系統(打開、保存文件等)和后臺管理子系統(啟動和關閉服務等),系統的總體設計如圖2所示:
■
圖2 系統的總體設計圖
在基于Web的三維交互設計系統中,對場景圖的操作是整個系統的核心和關鍵,本系統所構造的三維場景,必須運行一個Java3D程序。這個Java3D應用程序必須首先創建一個虛擬宇宙對象并且至少把一個Locale對象附加之上。然后,構建出需要的場景圖像,它由一個分支組結點開始并且包括至少一個觀察平臺對象,而場景圖就是附加于這個觀察平臺。當一個包含場景圖的觀察對象被附加于一個虛擬宇宙,Java3D的渲染循環就開始工作。這樣,場景就會和它的觀察對象一起被繪制在畫布上。系統支持從服務器端初始化和載入各種三維格式的文件,包括OBJ,3DS,J3D,VRML等,Java3D的com.sun.j3d.loaders包中包括了Loader和Scene兩個接口,在Java3D中調用不同格式的3D圖形文件,應根據這兩個接口編寫自己的Loader類,針對不同類型的3D圖形文件編寫不同的Loader類。以下為系統載入的一個3DS的船模型圖:
■
圖3 系統載入的3DS船模型效果圖
以調用VRML場景為例,SUN提供了一個VRML97的Loader,可以利用它來在Java3D中調用VRML97類型的文件。當使用Loader將一個VRML文件導入Java3D中,Loader接口的Load的方法將返回一個com.sun.j3d.loaders.Scene對象,通過調用Scene的getSceneGroup()方法返回一個BranchGroup對象,該對象可以直接被Java3D的場景圖直接引用,這樣VRML文件就轉換為Java3D的場景類型。
三維系統中一個重要的功能就是與用戶進行交互,Java3D中實現交互有三種方式:第一類是利用Java的事件處理模型,第二類是利用Java3D提供的Behavior包中提供的utility對象,第三類是定義自己的Behavior對象。要實現復雜的交互行為,一般需要編寫相應的行為類來實現。通過構造Behavior對象引用它所控制的對象,對該引用的改變才會反映到它原來的對象上。以下是基于Web的三維交互設計系統中對Shape3DBehavior類的構造的關鍵方法。
private Point3d setTranslate(Point3d p3d) {
boolean isScale = 1;
Transform3D tempT3d;
switch (currentKeyChar) {
case KEYCHAR_A: {scaleDir.x = -1.0;scaleDir.y = 0.0;
scaleDir.z = 0.0; break; }
case KEYCHAR_S: {scaleDir.x = 0.0; scaleDir.y = -1.0;
scaleDir.z = 0.0; break; }
case KEYCHAR_D: {scaleDir.x = 1.0; scaleDir.y = 0.0;
scaleDir.z = 0.0; break; }
case KEYCHAR_Q: {scaleDir.x = 0.0; scaleDir.y = 0.0;
scaleDir.z = 1.0; break; }
case KEYCHAR_W: {scaleDir.x = 0.0;scaleDir.y = 1.0;
scaleDir.z = 0.0; break; }
case KEYCHAR_E: {scaleDir.x = 0.0; scaleDir.y = 0.0;
scaleDir.z = -1.0; break; }
case KEYCHAR_F:
case KEYCHAR_R:
case KEYCHAR_Y:
case KEYCHAR_X:
case KEYCHAR_Z:{ scaleDir.x = 0.0;scaleDir.y = 0.0;
scaleDir.z = 0.0;isScale = true; break; }}
if (isScale) {
tempT3d = new Transform3D();
if (currentKeyChar == KEYCHAR_F)
tempT3d.set(1.1d);
if (currentKeyChar == KEYCHAR_R)
tempT3d.set(0.9d);
if (currentKeyChar == KEYCHAR_Y)
tempT3d.rotY(Math.PI/36);
if (currentKeyChar == KEYCHAR_X)
tempT3d.rotX(Math.PI/36);
if (currentKeyChar == KEYCHAR_Z)
tempT3d.rotZ(Math.PI/36);
tempT3d.transform(p3d);
isScale = 1;}
worldToLocaleT3D.transform(scaleDir);
p3d.x += (scaleDir.x * 0.05f);
p3d.y += (scaleDir.y * 0.05f);
p3d.z += (scaleDir.z * 0.05f);
return p3d;}
Shape3Dbehavior類的主要作用是:對單個形體所做的操作,此操作修改形體頂點坐標的值。 “f”為放大,“r”為縮小,“y”為沿Y軸旋轉,“x”為沿X軸旋轉,“z”為沿Z軸旋轉,以實現3D圖形的移動、縮放和旋轉。通過構造Shape3Dbehavior類,以完成用戶對3D圖形的設計,實現復雜的交互行為。
4 結束語
在網絡上實現三維虛擬環境是未來計算機技術發展的一個重要方向,將Internet與交互式的三維技術結合起來是一項激動人心的事情。本文通過Java3D平臺構建了新型的三維交互設計系統,該系統通過Web的形式,讓不同地域的用戶和三維設計者通過網絡,對由各種三維設計軟件生成的圖形文件在網頁上進行瀏覽、編輯和提交編輯結果等操作,為三維設計人員與用戶,設計人員與設計人員之間進行三維交互設計創造了條件。
參考文獻:
[1] 王維敏. Web3D技術探索及幾種Web3D技術的比較選擇[D]. 武漢大學,2004.
[2] 張杰. Java 3D交互式三維圖形編程[M]. 人民郵電出版社,1999.
[3] 都志輝,劉鵬, 等. Java 3D編程實踐[M]. 北京清華大學出版社 2002.
[4] 曲毅民. Java 3D實現三維顯示研究[J]. 信息技術,2005,4:83-85.
[5] 丘威,鐘治初,張立臣. 基于Web3D的虛擬場景漫游的設計與實現[J]. 微計算機信息,2007.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文