黎國進,陳 杰,李 佳,陳定方
(武漢理工大學智能制造與控制研究所,湖北 武漢 430063)
虛擬漫游技術(shù)作為虛擬現(xiàn)實(VR)技術(shù)的重要分支,在建筑、觀光旅游、游戲、航空航天、醫(yī)學,軍事演練等多種行業(yè)中得到廣泛應用.在漫游場景中加入圖像、聲音、視頻等多媒體,其強烈的沉浸感、交互性和構(gòu)想性給用戶一種身臨其境的感覺.JOGL對OpenGL 2.0規(guī)范中的API提供全面的支持,而且還集成了Java AWT和Java Swing界面組件[1].由于得到Sun公司和SGI的大力支持,以及Java平臺自身的優(yōu)勢,JOGL作為3D圖形開發(fā)庫得到了廣泛的運用.
根據(jù)所用的操作系統(tǒng)平臺,下載與之匹配的最新JDK.
對于Windows用戶,下載 JOGLl-1.1.1-windows-i586.zip;環(huán)境配置(以 Windows用戶為例)過程如下:首先解壓JOGLl-1.1.1-windows-i586.zip,得到ext和lib.然后將lib文件夾中的DLL文件復制并存放于C: JAVA WORKSPACE JOGL1DLL中.將lib文件夾添加到系統(tǒng)PATH環(huán)境變量中,例如:C: JAVA WORKSPACE lib;將 lib文件夾中的jogl.jar,gluegen-rt.jar這兩個Jar包的絕對路徑添加到系統(tǒng)CLASSPATH環(huán)境變量中.
本文采用MyEclipse8.6版本作為軟件開發(fā)環(huán)境.項目環(huán)境配置(以Windows用戶為例)如下.
1)新建一個工程:File※new※Java Project※在Project Name文本框中輸入工程名.
2)點擊Next,對Java編譯環(huán)境進行設(shè)置.Libraries※Add External JARS※打開C: JAVA WORKSPACE jar1文件夾中的二個Jar包※Order and Export※點擊Select All※點擊Finished.
3)點擊工程名,右鍵※Properties※Java Build Path※Source※點擊工程名/src※選中Native library location※Link Source※Browse※選中 C:JAVA WORKSPACE JOGL1DLL文件夾※OK.
Opengl由兩個庫組成——GL和GLU(Opengl Utility Library).GL庫包含了提供基本圖形特征的核心函數(shù);GLU庫包含了高級別的基于GL函數(shù)的應用函數(shù)[2].
JOGL提供GL和GLU兩個類來封裝Opengl的GL和GLU函數(shù).組件GLCanvas和GLJPanel為Opengl函數(shù)調(diào)用提供繪制表面.GLCanvas是重量級組件,能夠啟動使用硬件加速功能.GLJPanel是在系統(tǒng)內(nèi)存中實現(xiàn)的輕量級組件,不能使用硬件加速功能[2].在此采用GLCanvas畫布組件.實現(xiàn)過程如下:1)在Applet的init方法中聲明一個GLCanvas畫布實例對象并設(shè)置其相關(guān)屬性;2)為畫布對象添加GLEventListener監(jiān)聽器;3)新建一個類,實現(xiàn)GLEventListener接口中的init,display,reshape,displayChange等4個方法,在init方法中獲取gl,glu等實例對象并設(shè)置場景渲染的相關(guān)屬性,在display方法中繪制場景和顯示模型.
采用類似于OSG中的包圍體來實現(xiàn)漫游的范圍.包圍體的6個面分別為6張紋理圖片.裝載紋理圖片的核心代碼如下:
人機交互技術(shù)是虛擬現(xiàn)實技術(shù)的一個重要分支,在漫游場景中,可以實現(xiàn)虛攝像機的前進、后退、旋轉(zhuǎn)、仰視、俯視等操作.
通過調(diào)用GLU類的gluLookAt(
double eyeX,double eyeY,double eyeZ,
double atX,double atY,double atZ,
double upX,double upY,double upZ)方法設(shè)置虛擬攝像機的屬性.
其中:eyeX,eyeY,eyeZ表示虛擬攝像機的位置;atX,atY,atZ表示虛擬像機所“看”的點的坐標;upX,upY,upZ表示虛擬攝像機的觀察方向——倒立,正立或者從某一個角度進行觀察.其示意圖如圖
圖1 gluLookAt函數(shù)示意圖
與gluLookAt函數(shù)共同作用于虛擬像機的還有g(shù)luPerspective(
GLdouble fovy,//設(shè)置虛擬像機的視界范圍
GLdouble aspect,//窗體的縱橫比
GLdouble zNear,//視野近點透視深度
GLdouble zFar//視野遠點透視深度
)方法.
通過實現(xiàn)KeyListener接口,對窗體添加鍵盤監(jiān)聽事件,即可通過鍵盤對虛擬攝像機的位置、視點、觀察角度予以變換,實現(xiàn)交互式虛擬漫游.
圖2 gluPerspective函數(shù)示意圖
Java Applet即Java小應用程序,在瀏覽器中運行,能處理圖像、聲音、動畫等多媒體數(shù)據(jù).當用戶訪問這樣的網(wǎng)頁時,Applet被自動下載到本機.采用Java Applet技術(shù),將Opengl所渲染的場景在瀏覽器中顯示(圖3).其設(shè)置如下:1)編譯源程序;2)將所有的字節(jié)碼文件生成一個Jar包;3)對程序中用到的兩個Jar包以及生成的joglApplet.jar包進行數(shù)字簽名;4)在字節(jié)碼文件中新建一個Html文件,將applet標簽加入到文件中,代碼如下
.
圖3 程序在瀏覽器中運行示意圖
[1]李貽斌,牟龍芳.基于JOGL的關(guān)節(jié)機器人仿真[J].蘇州市職業(yè)大學學報,2008,19(1):53-56.
[2]Liang Y D,Zhang H.計算機圖形學應用Java 2D和3D[M].孫正興,張 巖,蔣 維,等譯.北京:機械工業(yè)出版社,2008.
[3]Davis G.Learning Java Binding for Opengl[EB/OL][2011-03-03].http://alvarestech.com/temp/capp/0steptools/0booksmaio-20-2011/Learning% 20Java%20Bindings%20for%20OpenGL%20-%20Gene%20Davis.pdf.