李婷婷,余慶軍
(大連東軟信息學院 數字藝術系,遼寧 大連 116023)
近年來,隨著信息技術的迅速發展,計算機處理器能力顯著增強,圖形繪制技術顯著提高,促進了虛擬現實技術的發展。虛擬現實技術(virtual reality,VR)由美國人Jaron Lanier提出,可以讓用戶置身于一個虛幻環境中,產生身臨其境的感覺[1]。虛擬現實技術的應用非常廣泛,在建筑、醫療、軍事、航天等領域都有涉及,其中虛擬場景漫游作為虛擬現實技術的一個重要應用,近年來已成為研究熱點。例如,美國的Stanford大學、Washington大學等主要研究虛擬現實技術的跟蹤、識別、運動對象動態跟蹤等領域,并取得了突破性的進展[2-5];浙江大學針對桌面虛擬漫游系統進行研究,開發了一套虛擬建筑環境實時漫游系統[6];清華大學針對虛擬現實臨場感進行研究,取得了較好的真實感效果[7]。在傳統虛擬漫游系統開發的基礎上,文中基于OpenGL技術開發交互式虛擬漫游系統,并詳細討論了交互式場景漫游的一些關鍵技術,為交互式虛擬現實技術發展提供參考。
OpenGL是由SGI公司推出的一種圖形與硬件的接口,包括120個圖形函數,開發者可以用這些函數來建立三維模型和進行三維實時交互。由于其強大的圖形可視化功能且易于使用,已被認為是高性能圖形和交互式視景處理的標準。
圍繞交互式虛擬漫游系統的實現需求,將系統進一步劃分為四個模塊,其中建模模塊是利用OpenGL庫函數進行場景模型的3D建模,并采用VC++語言實現整個虛擬場景的搭建,交互模塊主要通過鍵盤交互方式向用戶發送并接收交互指令,比如前進、后退、轉向、開燈等功能。系統功能模塊如圖1所示。

圖1 系統架構
基于幾何方式構建虛擬場景,首先需要根據場景模型進行數學建模,構造虛擬的三維景觀中的模型結構;然后按照場景顯示的需求,再采取紋理映射、光照等數學模型加以渲染;最后加入交互控制,實現虛擬漫游效果。
場景中地面繪制采用紋理映射方式實現[8-9],通過將紋理貼圖映射到地面上實現地面真實感繪制需求,地面紋理貼圖效果如圖2所示。具體實現時,首先采用一個二維數組來定義紋理,然后將二維紋理表面到三維景物表面做一個映射,實現紋理貼圖效果。

圖2 地面紋理貼圖
為虛擬場景增加天空盒子,能夠極大地增加整個場景的真實感程度[10]??紤]到真實感和渲染速度,系統選用了盒子方法生成天空。首先在場景中構建一個六面體,然后制作天空盒紋理,最后進行紋理貼圖。天空盒紋理圖片如圖3所示。

圖3 天空盒紋理圖片
虛擬現實場景中的模型繪制是虛擬場景的基礎[11],也是系統最為復雜的一部分,因為模型構造的質量直接影響到虛擬場景的真實感和沉浸感。文中構建的交互式虛擬漫游系統包括室外場景和室內場景。為了提高場景真實感,在系統中加入了很多細節模型,比如蛋糕、小狗、仙人掌、爐子等。另外考慮到系統開銷,在構建模型時盡量采用多邊形構建加紋理貼圖方式實現,部分代碼如下所示:
void DrawSence(void)
{glPushMatrix();
drawObject(50.0,5.0,50.0,0.0,-5.647,-10.0,0,0.0,0.0,0.0,78,78,78,78,78,78);
drawObject(9.2,5.0,25.0,-11.0,-5.646,-10.1,0,0.0,0.0,0.0,80,80,80,80,80,80);
drawObject(1.0,0.01,0.8,-0.4,-0.646,-0.4,0,0.0,0.0,0.0,77,77,77,77,77,77);
glPopMatrix(); }
物體表面向空間給定方向輻射的光強可應用光照模型進行計算[12]。場景光源添加時除了要考慮光源照射在物體表面產生的反射光外,還要考慮周圍環境的光對物體表面的影響[13]。因此,系統在場景建模時為其加入了環境光、漫射光這兩種光源,光源開啟前后對比如圖4所示。具體實現時,首先要創建、選擇光源,并為光源定位;然后根據gllight(Glenum pname,Glfloat param)定義光照的類型和參數;最后調用函數glEnable()啟動各個光源。光源部分代碼如下所示:
glLightfv(GL_LIGHT1,GL_AMBIENT,LightAmbient);
glLightfv(GL_LIGHT1,GL_DIFFUSE,LightDiffuse);
glLightfv(GL_LIGHT1,GL_POSITION,LightPosition);
glEnable(GL_LIGHT1);

圖4 光源開啟前后對比圖
為了增加系統真實感,在構建房屋場景時加入虛擬煙霧粒子。粒子系統是Revess在1983年提出的不規則物體建模方法,幾何特征簡單,可以采用多邊形來表示,非常適合模擬自然界中云、雨、霧等特效[14]。
3.2.1 定義粒子的數據結構
粒子結構中包含的粒子屬性主要有粒子的生命數值、初始速度、初始坐標等多項特性。系統中定義的粒子數據結構如下:
typedef struct//粒子結構
{ float life;//粒子生命周期
float fade;//粒子衰減速度
float r;//粒子顏色
float g;//粒子顏色
float b;//粒子顏色
float x;//粒子x方向位置
float y;//粒子y方向位置
float z;//粒子z方向位置
float xi;//粒子x方向加速度
float yi;//粒子y方向加速度
float zi;//粒子z方向加速度
float xg;//粒子x方向重力加速度
float yg;//粒子y方向重力加速度
float zg;//粒子z方向重力加速度
}
particles;
3.2.2 粒子出生
粒子出生過程即根據設計好的噴泉粒子屬性讓粒子出生,為每一個噴泉粒子進行屬性賦值,這個過程需要在初始化函數中用循環實現。
3.2.3 粒子的運動
系統中煙霧粒子的運動近似于斜上拋運動,具體粒子屬性更新如下所示:
位置:P(fi)=P(fi-1)+S(fi-1)*(fi-fi-1)。
速度:S(fi)=MS+RAND()*VS+A*(fi-f0)。
顏色:C(fi)=MC+RAND()*VC+△C*(fi-f0)。
透明度:T(fi)=MT+RAND()*VT+△T*(fi-f0)。
生存期:L(fi)=L(fi-1)-1。
其中,fi為幀號;△C和△T分別為粒子的顏色變化率和透明變化率。
3.2.4 粒子的繪制
主要是對粒子的屬性初值進行設定。每個周期都要對粒子的屬性進行更新,對粒子進行添加、刪除和移動操作,然后對粒子進行繪制,主要代碼如下:
glBindTexture(GL_TEXTURE_2D,texture[0]);
AddParticles(); //添加新的粒子
MoveParticles(); //粒子運動函數
DeleteParticles(); //刪除粒子
3.2.5 粒子死亡
每一個粒子在初始化時都被賦予了生命值,隨著時間的流逝,粒子的生命值在逐漸衰減,當衰減到0時,系統認為粒子死亡,將其從系統中刪除。為了保證煙霧粒子的持續性,系統在定義一波粒子死亡的同時又產生一批新的粒子。
在三維場景漫游中,觀察者可以通過鍵盤來控制視點的位置、視向和參考方向[15]。視線方向可以由參考點位置確定,漫游的過程就是不斷移動視點或改變視線方向[16]。系統采用鍵盤上w、s、a、d鍵實現前后左右移動;采用j、l、k、i鍵實現旋轉操作,進而實現控制用戶漫游。
為了驗證系統運行效果,文中進行了大量仿真實驗。仿真配置為Pentium(R) G4400、CPU 3.3 GHz、DDR4 4 G內存及Intel HD Graphics 510(128M)核心顯卡的PC機,編譯環境為Visual VC++6.0,結合三維圖形開發接口OpenGL作為軟件開發平臺。系統運行實驗結果如圖5和圖6所示。

圖5 虛擬場景室外測試圖

圖6 虛擬場景室內測試圖
基于OpenGL技術開發交互式虛擬漫游場景并對一些關鍵技術進行了研究與分析,包括場景的建模、煙霧的模擬、地面天空的繪制、交互控制、視點漫游技術的實現等,可以給人以身臨其境的感覺。系統運行流暢,畫面真實感強,人機交互效果良好,擁有廣闊的應用前景。未來,隨著虛擬現實技術的不斷成熟,下一步將繼續考慮采用物理建模方式并利用GPU加速處理,得到更為真實、流暢的交互式虛擬漫游效果。
[1] 周 忠,周 頤,肖江劍.虛擬現實增強技術綜述[J].中國
科學:信息科學,2015,45(2):157-180.
[2] HAVIG P,MCINTIRE J,GEISELMAN E.Virtual reality in a cave:limitations and the need for HMDs[C]//Proceedings of SPIE.[s.l.]:[s.n.],2011.
[3] GAO C,LIN Y,HUA H.Optical see-through head-mounted display with occlusion capability[C]//Proceedings of SPIE.[s.l.]:[s.n.],2013.
[4] CHEN Y J,THALMANN N M,ALLEN B F.Physical simulation of wet clothing for virtual humans[J].Visual Computer,2012,28(6-8):765-774.
[5] PATKAR S,GHAUDHURI P.Wetting of porous solids[J].IEEE Transactions on Visualization and Computer Graphics,2013,19(9):1592-1604.
[6] 安 興,李 剛,徐林偉,等.虛擬現實技術在美軍模擬訓練中的應用現狀及發展[J].電光與控制,2011,18(10):42-46.
[7] 主福洋.虛擬現實技術的現狀及發展趨勢[J].中國新通信,2012(20):37.
[8] 王相海,李婷婷,龐 新.基于重復紋理映射的動態云實時模擬研究[J].計算機科學,2011,38(2):257-259.
[9] 王相海,李婷婷.基于幾何建模的海浪模擬[J].計算機科學,2011,38(10):259-262.
[10] 何曉波.火箭測試發射過程可視化虛擬訓練系統的研究與實現[D].西安:西安電子科技大學,2014.
[11] 方 沁.基于Unity和3dmax的虛擬實驗室三維建模設計與實現[D].北京:北京郵電大學,2015.
[12] 董 梁,劉 海,韓俊剛.圖形處理器中光照和紋理映射的設計與仿真實現[J].計算機科學,2011,38(2):284-287.
[13] 陳海鵬,申鉉京,呂穎達,等.基于Lambert光照模型的圖像真偽盲鑒別算法[J].計算機研究與發展,2011,48(7):1237-1245.
[14] 袁雪霞,尹新富.煙霧的快速模擬[J].計算機工程與設計,2008,29(9):2392-2393.
[15] 吳艷繁.基于視線追蹤的人機交互系統[D].長春:吉林大學,2014.
[16] 朱惠娟.基于Unity3D的虛擬漫游系統[J].計算機系統應用,2012,21(10):36-39.