王妙婷
(陜西財(cái)經(jīng)職業(yè)技術(shù)學(xué)院 經(jīng)濟(jì)與金融管理學(xué)院, 咸陽(yáng) 712000))
隨著現(xiàn)代信息技術(shù)的不斷發(fā)展,信息技術(shù)開始被廣泛的應(yīng)用在各個(gè)領(lǐng)域,并引領(lǐng)者現(xiàn)代人們的生活。其中,虛擬現(xiàn)實(shí)技術(shù)作為信息技術(shù)應(yīng)用的一個(gè)重要方面,具有沉浸性、體驗(yàn)性和漫游性等特點(diǎn),從而受到各方面的重視。如伍朝輝(2016)結(jié)合虛擬現(xiàn)實(shí)的優(yōu)勢(shì)[1],將虛擬現(xiàn)實(shí)技術(shù)應(yīng)用到交通方面,通過(guò)應(yīng)用極大提高了交通規(guī)劃的效率。與此同時(shí),對(duì)建筑設(shè)計(jì)來(lái)講,如何提高建筑規(guī)劃設(shè)計(jì)的效率,并通過(guò)這種虛擬的方式對(duì)設(shè)計(jì)效果進(jìn)行修改,是當(dāng)前虛擬現(xiàn)實(shí)技術(shù)在建筑領(lǐng)域應(yīng)用的關(guān)鍵。但是對(duì)虛擬現(xiàn)實(shí)技術(shù)來(lái)講,單純的虛擬現(xiàn)實(shí)技術(shù)雖然可以產(chǎn)生沉浸感,但是在實(shí)際的展示過(guò)程中,很難達(dá)到人們滿意的結(jié)果。對(duì)此,人們提出將虛擬現(xiàn)實(shí)技術(shù)應(yīng)用到建筑設(shè)計(jì)中,如肖健(2016)則提出了在建筑設(shè)計(jì)領(lǐng)域中應(yīng)用OpenGL虛擬仿真的價(jià)值和意義[2];黃珍[3]、朱耀麟[4]等則給出了虛擬仿真軟件在建筑中應(yīng)用的實(shí)例,從而為當(dāng)前虛擬現(xiàn)實(shí)技術(shù)的應(yīng)用提供了借鑒。本文結(jié)合上述的需求,提出一種基于OpenGL軟件的建筑虛擬仿真展示平臺(tái),并對(duì)該平臺(tái)進(jìn)行了詳細(xì)的闡述和設(shè)計(jì)。
結(jié)合虛擬建筑展示的相關(guān)要求,同時(shí)根據(jù)系統(tǒng)設(shè)計(jì)的目的,在對(duì)本系統(tǒng)的設(shè)計(jì)中主要依據(jù)以下幾個(gè)原則:
第一,真實(shí)性。作為對(duì)建筑物的一種虛擬展示,在對(duì)本系統(tǒng)的設(shè)計(jì)中,對(duì)各種建筑實(shí)體模型和建筑虛擬環(huán)境的構(gòu)建都要與實(shí)際的建筑環(huán)境有較好的相似性,從而使得用戶在進(jìn)入到該平臺(tái)的時(shí)候,能夠身臨其境。因此,在對(duì)該虛擬平臺(tái)進(jìn)行構(gòu)建的過(guò)程中,要盡量保證建筑場(chǎng)景的真實(shí)感。
第二,實(shí)用性。在對(duì)平臺(tái)的設(shè)計(jì)中,界面要友好,同時(shí)各種功能操作方便,同時(shí)對(duì)硬件各方面的要求要低,以此更好的支持建筑設(shè)計(jì)、施工等的利用。
第三,系統(tǒng)設(shè)計(jì)需要預(yù)留功能擴(kuò)展接口,進(jìn)而方便對(duì)系統(tǒng)進(jìn)行二次開發(fā)。對(duì)此,本系統(tǒng)在開發(fā)的過(guò)程中,引入OpenGL開發(fā)軟件和C#語(yǔ)言,并借助.NET體系完成對(duì)類的繼承和重新,進(jìn)而實(shí)現(xiàn)對(duì)不同功能的擴(kuò)展。
第四,協(xié)作性??紤]到該系統(tǒng)使用的不同角色,在對(duì)該系統(tǒng)進(jìn)行設(shè)計(jì)的過(guò)程中,則需要采用多用戶協(xié)作管理的方式,包括遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù)和不同的使用權(quán)限等。
在對(duì)該平臺(tái)進(jìn)行設(shè)計(jì)的過(guò)程中,需要為用戶提供建筑虛擬環(huán)境創(chuàng)建、虛擬場(chǎng)景管理、場(chǎng)景交互等。因此,結(jié)合該設(shè)計(jì)的目標(biāo),將該系統(tǒng)整體功能設(shè)計(jì)為如圖1所示。
圖1 系統(tǒng)功能模塊設(shè)計(jì)
在虛擬場(chǎng)景的創(chuàng)建模塊中,主要包括3d文件導(dǎo)入、真實(shí)感模型、虛擬環(huán)境創(chuàng)建等功能。而在3D模型導(dǎo)入階段,主要是導(dǎo)入外部的建筑三維立體模型。真實(shí)感模型主要對(duì)構(gòu)建的三維立體模型的材質(zhì)、透明度和紋理等進(jìn)行設(shè)置,進(jìn)而完成對(duì)虛擬仿真模型的渲染。虛擬環(huán)境的創(chuàng)建主要是對(duì)建筑設(shè)計(jì)或者是施工中的場(chǎng)景進(jìn)行構(gòu)建,包括走廊、施工場(chǎng)地、天空等等一系列環(huán)境的模擬;
虛擬場(chǎng)景管理模塊則主要包括虛擬場(chǎng)景的渲染、漫游控制等。其中渲染控制主要是對(duì)部分試題的仿真數(shù)據(jù)的模式進(jìn)行選擇,進(jìn)而根據(jù)其中的參數(shù)對(duì)環(huán)境進(jìn)行不同方式的渲染。比如在設(shè)計(jì)中需要設(shè)計(jì)下雨天氣下的建筑施工環(huán)境,則需要設(shè)置不同的天氣參數(shù)。而在漫游控制中還包括視角控制和動(dòng)態(tài)虛擬控制。視角控制是對(duì)三維坐標(biāo)視角進(jìn)行實(shí)時(shí)轉(zhuǎn)換、縮放等,而動(dòng)態(tài)虛擬控制則對(duì)構(gòu)建的工序、吊塔等進(jìn)行控制。
虛擬場(chǎng)景的交互主要是獲取相應(yīng)的仿真數(shù)據(jù),并對(duì)場(chǎng)景進(jìn)行控制和信息交換;
數(shù)據(jù)管理部分主要是對(duì)結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行管理,從而更好的對(duì)系統(tǒng)數(shù)據(jù)進(jìn)行維護(hù);
權(quán)限管理主要對(duì)不同的使用權(quán)限進(jìn)行劃分,進(jìn)而讓系統(tǒng)各歸其位,不同角色擁有不同的功能。
根據(jù)上述的功能模塊,將該系統(tǒng)的整體架構(gòu)設(shè)計(jì),如圖2所示。
OpenGL(Open Graphics Library),是一個(gè)可靈活調(diào)用的開放式底層圖形庫(kù),具有非常強(qiáng)大的功能,并被廣泛的應(yīng)用在三維圖像跨平臺(tái)編程接口中[5-6]。在OpenGL軟件中,擁有獨(dú)立的操作窗口,并結(jié)合其應(yīng)用程序,可靈活的在各種操作平臺(tái)上進(jìn)行移植。與此同時(shí),OpenGL軟件可與Visual C++接口連接,bi進(jìn)實(shí)現(xiàn)相關(guān)的計(jì)算和圖形算法,以確保算法運(yùn)行的可靠性和穩(wěn)定性。正是由于OpenGL軟件自身的優(yōu)勢(shì),使得其被廣泛的用在三維演示系統(tǒng)接口的編程之中。OpenGL工作原理如圖3所示。
圖2 系統(tǒng)整體架構(gòu)設(shè)計(jì)
圖3 OpenGL軟件工作流程
在圖3中可以看出,客戶端程序首先從OpenGL中調(diào)用不同的文件函數(shù),包括glu32.dll、opengl32.dll,然后在將請(qǐng)求傳遞給Win32 DDI,最后通過(guò)驅(qū)動(dòng)程序?qū)⑻摂M仿真結(jié)果顯示出來(lái)。在本文的實(shí)現(xiàn)中,用戶通過(guò)調(diào)用OpenGL客戶端,然后與服務(wù)器進(jìn)行交互,并通過(guò)其中的調(diào)用文件完成對(duì)虛擬建筑的仿真模擬。
在實(shí)際的三維圖形程序構(gòu)建中,考慮到OpenGL的建模功能不齊全,所以在對(duì)三維建筑模型進(jìn)行設(shè)計(jì)的過(guò)程中,需要借助相應(yīng)的三維軟件進(jìn)行建模,進(jìn)而更好的實(shí)現(xiàn)對(duì)虛擬常見(jiàn)的搭建。對(duì)此對(duì)比當(dāng)前的三維軟件,本文則提出一種采用3dMAX對(duì)三維建筑模型進(jìn)行構(gòu)建[7-13]。具體則是將構(gòu)建的帶3dMAX的三維模型文件導(dǎo)入到OpenGL中,從而減少了傳統(tǒng)OpenGL軟件構(gòu)建三維模型的工作量。
在完成3D文件的導(dǎo)入之后,還需要對(duì)三維立體模型進(jìn)行模擬,進(jìn)而實(shí)現(xiàn)動(dòng)畫。在本文系統(tǒng)中,則引入OpenGL雙緩存技術(shù)完成對(duì)動(dòng)畫的顯示[14-16]。即當(dāng)前臺(tái)在緩存顯示畫面的時(shí)候后臺(tái)緩存則生成下一幀的畫面,而當(dāng)畫面在生成以后,通過(guò)交換緩沖的方式,將畫面展示出來(lái)。與此同時(shí),前臺(tái)緩存開始進(jìn)入到下一幀畫面的生成。由此通過(guò)上述步驟的反復(fù)循環(huán),完成對(duì)畫面的連續(xù)性展示。上述的過(guò)程,如圖4所示。
在圖4中看出,程序首先是啟動(dòng)動(dòng)畫畫面,然后顯示建筑虛擬仿真開始和結(jié)束的時(shí)間;其次,判斷開始時(shí)間和結(jié)束時(shí)間,如開始時(shí)間Ts大于結(jié)束時(shí)間Es,那么動(dòng)畫結(jié)束,反之則繼續(xù);第三,對(duì)每個(gè)實(shí)體動(dòng)畫進(jìn)行判斷,如果Ts大于Es,那么此時(shí)動(dòng)畫畫面不變換,并等待下一幀動(dòng)畫,如果小于,在判斷動(dòng)畫是否已經(jīng)結(jié)束,如果沒(méi)有結(jié)束,那么計(jì)算相應(yīng)的變換矩陣,并結(jié)合該變化矩陣對(duì)模型進(jìn)行渲染,如結(jié)束,則乘以最后的變換矩陣,并讓模型處在最后的這個(gè)坐標(biāo)位置當(dāng)中;第四,計(jì)算插值系數(shù)n,并根據(jù)插值系數(shù)計(jì)算變換矩陣,從而更好的變化不同的模型位置;第五,根據(jù)現(xiàn)實(shí)列表進(jìn)行實(shí)體繪制,并使用auxSwapBuffers(void)命令,對(duì)新位置的模型進(jìn)行生成;第六,對(duì)下一輪的實(shí)體模型進(jìn)行繪制和顯示,并每間隔一定時(shí)間重新進(jìn)行繪制和顯示。在第二幀完成后的每幀開始時(shí),將開始時(shí)間設(shè)定為Ts+=alterTime,并繼續(xù)進(jìn)行第二步循環(huán)。
圖4 基于OpenGL的動(dòng)畫生成流程圖
通過(guò)上述的設(shè)計(jì),模擬建筑天氣參數(shù)為夜晚,進(jìn)而可以得到動(dòng)畫界面,如圖5所示。
通過(guò)上述的設(shè)計(jì)可以看出,通過(guò)3dmax三維建模軟件的建模,然后將3dmax文件導(dǎo)入到OpenGL,并通過(guò)OpenGL的渲染,實(shí)現(xiàn)了對(duì)不同場(chǎng)景下的建筑虛擬環(huán)境的構(gòu)建,進(jìn)而通過(guò)這種動(dòng)畫的場(chǎng)面,為人們提供了一種具有沉浸感和真實(shí)性的建筑環(huán)境,以此更好的提高了建筑設(shè)計(jì)和施工的效率,為當(dāng)前信息技術(shù)在建筑領(lǐng)域的靈活應(yīng)用提供了新的參考。
圖5 虛擬夜間建筑場(chǎng)景