摘 要: 為了實現(xiàn)虛擬圖書館的可視化仿真,綜合運用實地測量、參考建筑圖紙、拍攝等方法獲取圖書館的外形輪廓,通過數(shù)學(xué)建模得到整個圖書館的數(shù)學(xué)建模,再借助基于C++的幾何庫,將圖書館的數(shù)學(xué)建模轉(zhuǎn)化為圖形實例,最后結(jié)合OpenGL技術(shù),通過運用光照、材質(zhì)和紋理,渲染出整個圖書館,使得圖書館仿真逼真、自然。仿真結(jié)果表明,構(gòu)建的虛擬圖書館逼真地展現(xiàn)了圖書館的形態(tài)特征,真實感較好,為虛擬建筑的模擬提供了技術(shù)參考。
關(guān)鍵詞: 數(shù)學(xué)建模; 幾何庫; OpenGL; 建筑仿真
中圖分類號: TN911.71?34; TP391.41 文獻標識碼: A 文章編號: 1004?373X(2016)02?0078?04
Visualization research and simulation of OpenGL?based 3D architecture
MIN Fang1, ZHANG Zhixian2, YANG Gongting1
(1. Jincheng College, Nanjing University of Aeronautics and Astronautics, Nanjing 211156, China;
2. College of Automation, Nanjing University of Aeronautics and Astronautics, Nanjing 210016, China)
Abstract: In order to realize the visual simulation of the virtual library, the outline of the library is obtained by comprehensively using the methods of field measurement, architectural drawings reference, photographs, etc. The mathematical modeling of the entire library is obtained by mathematical expression, and converted into the graphic instance by virtue of the geometry library based on C++. In combination with OpenGL technology, the entire library is rendered by illumination, material and texture, which makes the library simulation realistic and natural. The simulation results show that the constructed virtual library can realistically exhibit the morphological characteristics of the library, and has perfect sens of reality, which provides a technical reference for virtual architecture simulation.
Keywords: mathematical modeling; geometry library; OpenGL; building simulation
0 引 言
虛擬三維建筑是虛擬現(xiàn)實研究領(lǐng)域的熱點課題之一。虛擬建筑由數(shù)學(xué)建模、幾何庫、紋理和渲染等組成;其中建筑中各構(gòu)件數(shù)學(xué)建模和幾何編程,具有較高的挑戰(zhàn)性。虛擬建筑在大型建筑的早期演示和論證、房地產(chǎn)演示等方面有著廣大的應(yīng)用場景[1]。目前,針對虛擬建筑仿真,國內(nèi)外專家學(xué)者開展了一系列研究。文獻[2]提出了一種面向?qū)ο蟮闹С秩S圖形可重用的組件層次設(shè)計方法,分析了組件的性能、設(shè)計方法和圖元算法,實現(xiàn)了基于OpenGL的支持三維虛擬場景、建模和運動仿真的組件設(shè)計,描述了實體的運動層次鏈接關(guān)系和數(shù)據(jù)結(jié)構(gòu),并實現(xiàn)了虛擬環(huán)境的建筑物建模和運動仿真。文獻[3]采用了2種技術(shù):基于圖像的建模方法和基于幾何網(wǎng)格頂點著色的建模方法,并對虛擬場景的光照、消隱、紋理影射技術(shù)等作了初步的探索。文獻[4]提出OpenGL的特點和工作原理,詳細論述了如何建立VC和OpenGL庫應(yīng)用接口及進行三維圖形開發(fā)的具體步驟和基本過程,最后通過三維地形圖繪制實例的過程分析,便于用戶理解運用。本文以南京航空航天大學(xué)金城學(xué)院圖書館作為研究對象,實現(xiàn)特點如下:對幾何圖形數(shù)學(xué)建模;使用C++語言建立幾何庫;通過OpenGL編程,添加紋理,渲染虛擬圖書館模型;驗證數(shù)學(xué)模型和幾何庫在虛擬建筑可視化研究的可行性。
整個系統(tǒng)模型的實現(xiàn)如圖1所示。
1 幾何庫
1.1 點的實現(xiàn)
點類的數(shù)據(jù)成員是雙精度浮點型數(shù)組xyz,以及記錄數(shù)組大小的整型變量dim。點類的意義是表示在空間之間坐標系中的具體坐標。點類定義如圖2所示。
圖1 系統(tǒng)模型圖
圖2 點類
點作為空間幾何中最基本的單位,對整個幾何庫具有十分重要的意義:幾何庫中的大部分構(gòu)件計算與求解,最終要歸結(jié)到點類實現(xiàn)。即當(dāng)確定了點在空間坐標系中的位置之后,便可以實現(xiàn)一些基本構(gòu)件(如線、面等)的計算與求解[4?5]。OpenGL渲染點的效果圖見圖3。
圖3 渲染點
1.2 線的實現(xiàn)
直線的實現(xiàn)是以點為基礎(chǔ)的。在空間直角坐標系中,一個坐標有多種含義:它既可以表示空間中的一個點;也可以表示一個有長度有方向的向量。因此在直線的定義中,運用了坐標的這兩種含義。線類定義如圖4所示。
圖4 線類
直線由2個點類對象組成:bas表示一個點,為該直線上的一個點,vec表示一個向量,為該直線的方向。
在幾何庫中,默認直線的長度是無限的。這種表示方法的優(yōu)勢在于,根據(jù)具體應(yīng)用場景的不同,可以理解成直線、射線和線段來使用。例如:當(dāng)作為射線時,bas便代表它的起點,而vec就是它射向的方向;當(dāng)作為線段時,bas便作為線段的一個點,vec的方向是它延伸的方向,vec的長度則是線段在該方向上的長度。OpenGL渲染直線的效果圖如圖5所示。
圖5 渲染線
1.3 面的實現(xiàn)
面的實現(xiàn)也是以點為基礎(chǔ)。在本系統(tǒng)中的幾何庫,對于面的表示和直線相同。只是對平面類中,相關(guān)的成員變量的理解和直線略有不同,面類定義如圖6所示。
圖6 面的類圖
平面也是由2個點類對象組成。首先需要明確一點,就是一個面類的對象所表示的面是無限大的。其中bas指所表示的平面上的一個點,而vec則指所表示平面,以bas為起點,vec為方向的一條射線,這條射線為該平面的法向量。
2 數(shù)學(xué)建模
2.1 空間坐標系的構(gòu)建
在建立空間直角坐標系時,假設(shè)觀察者正面對著圖書館大門,設(shè)此方向為z軸的正方向,其上方為x軸的正方向,而右側(cè)為y軸的正方向。
確立各個坐標軸的方向之后,給坐標軸設(shè)置一個原點。因為模擬的圖書館總體上為對稱的結(jié)構(gòu)。所以將圖書館兩側(cè)的中點設(shè)為y軸的原點,圖書館一樓的地面位置設(shè)為x軸的原點,面對觀察者最近的臺階位置為z軸的原點[6],如圖7所示。
2.2 比例尺的構(gòu)建
本系統(tǒng)需要用計算機編程渲染模擬圖書館;虛擬場景中構(gòu)成圖書館的每一個柱子每一根梁都必須滿足一定的比例從而讓渲染出的圖書館顯得更加真實。因此,就必須用一定的比例對圖書館進行縮放。
圖7 空間直角坐標系圖
參考圖書館的設(shè)計圖紙,將其按一定比例縮放到系統(tǒng)中。圖書館的外墻實現(xiàn)時,解決思路是全部貼上了規(guī)格一致的磚塊,便可以將一個磚塊的長寬設(shè)為一個基礎(chǔ)單位,而在圖書館的整體渲染時,也會對每一個磚塊進行單獨的渲染,從而解決比例尺的問題[7]。
2.3 構(gòu)件的表示
在完成坐標系和比例尺的構(gòu)建之后,便可以表示構(gòu)成圖書館的各個構(gòu)件,這里的構(gòu)件則是由虛擬建筑的幾何實體或幾何實體經(jīng)過一系列運算所構(gòu)成。
每一個構(gòu)件都具有兩個最基本的屬性,即位置和參數(shù)。構(gòu)件數(shù)學(xué)建模如式(1)所示:
[constructionpos,args] (1)
式(1)中construction表示構(gòu)件;pos表示構(gòu)件的位置;args表示構(gòu)件的參數(shù)。
構(gòu)件的位置是一個坐標,這個坐標為該構(gòu)件在空間直角坐標系,按照z軸、x軸和y軸的優(yōu)先級,選擇值最小的坐標點。即所有構(gòu)件上的點中,選出z軸上值最小的點,如果不止一個,在當(dāng)中選出x軸上值最小的點,若還有重復(fù),再比較y軸,選出y軸上值最小的點。該點即為該構(gòu)件的位置。構(gòu)件的參數(shù)是一系列的值,表示該構(gòu)件的形狀信息,如果一個構(gòu)件為一個長方體,則構(gòu)件的參數(shù)便為構(gòu)件的長、寬和高。
有了構(gòu)建之后,可以把整個圖書館作為對一系列構(gòu)件進行求和操作的結(jié)果。
圖書館數(shù)學(xué)建模如式(2)所示:
[library=constructionpos,args] (2)
2.4 構(gòu)件建模流程
本文所渲染模擬的建筑場景為南航金城學(xué)院的圖書館。圖書館的建筑風(fēng)格方方正正,有棱有角,因此其構(gòu)件基本上都為長方體的各種組合,這里以圖書館門前臺階為例,介紹對構(gòu)件建模的大致流程。
臺階數(shù)學(xué)建模如式(3)所示:
[stairs(pos,len,wid,hei,num)] (3)
其中,pos表示臺階構(gòu)件的位置坐標;len表示1節(jié)臺階的長度;wid表示1節(jié)臺階的寬度;hei表示1節(jié)臺階的高度;num表示臺階的總級數(shù)。
這里把臺階的每一級都看成為一個單獨的長方體,而整個臺階,便是由一個個高度不斷增加的長方體堆積而來。 根據(jù)上述表達式不難理解,pos為最初起始矩形的坐標,該矩形的長寬高也為輸入的長寬高的值。而第二個矩形一直到第num個矩形,其起始坐標的z值加上寬度便為其位置坐標。對于其參數(shù)信息,長方體的長和寬不變,高度累加。也可以理解成,臺階中每一個長方體構(gòu)件的坐標的z值和參數(shù)的高度值為一個等差數(shù)列,不斷變化。公式表示如下:
[stairs=inumCubei(posi,len,wid,heii)](4) [posi?z=pos1?z+(i-1)?wid] (5)
[heii=hei+(i-1)?hei] (6)
3 渲 染
對場景的渲染可以分為四部分,選擇視角、渲染點、光照與材質(zhì)和紋理的設(shè)定[8?9]。
渲染具體算法描述如下:
算法輸入:圖書館的數(shù)學(xué)模型
算法輸出:渲染成果
算法步驟:
(1) sysinit() //系統(tǒng)初始化
(2) light_on() //光照初始化
(3) texture_on() //紋理初始化
(4) texture_bind() //綁定紋理
(5) while !mod.empty() //當(dāng)渲染模型棧非空
(6) rend = mod.pop() //模型棧彈棧
(7) render(rend) //渲染模型
(8) end
4 實驗結(jié)果與分析
4.1 點線渲染
首先,需要渲染出構(gòu)件的點線模型如圖8所示。
圖8 渲染示例圖1
這樣做既可以檢測構(gòu)件的幾何空間正確性,同時,這也是選擇視角的基礎(chǔ),只有在有渲染圖形的基礎(chǔ)上,才可以根據(jù)已渲染的圖形對視角進行調(diào)整。但如圖8的渲染結(jié)果明顯偏大,因此需要選擇一個合適的視角,對渲染的圖形進行觀察,如圖9所示。
圖9 渲染示例圖2
通過反復(fù)修改視角,得到一個較為貼近真實場景的圖形,之后便可對圖形進行光照和材質(zhì)的加工[10],如圖10所示。
圖10 渲染示例圖3
4.2 圖書館整體渲染
圖書館實物圖如圖11所示。
圖11 圖書館實物圖
加入大理石紋理的圖書館如圖12所示。
圖12 大理石紋理
加入木質(zhì)紋理的圖書館如圖13所示。
圖13 木質(zhì)紋理
5 結(jié) 語
本文以虛擬圖書館建模為例,介紹了虛擬建筑建立幾何庫、數(shù)學(xué)建模過程以及可視化仿真的過程和方法。今后希望能從幾何庫、數(shù)學(xué)建模和渲染這3個方面入手,提高系統(tǒng)的效率和穩(wěn)定性,同時,通過完善改進對光線的模擬,以及圖書館材質(zhì)的反復(fù)試驗測試,使得渲染出的圖書館更加貼近真實的觀測效果。
參考文獻
[1] 徐旭東,王菁.基于OpenGL的虛擬吊蘭建模與可視化研究[J].計算機工程與設(shè)計,2014,34(12):4304?4309.
[2] 周靜海,宋曉宇,王永會.基于OpenGL的三維建筑設(shè)計組件的設(shè)計與實現(xiàn)[J].小型微型計算機系統(tǒng),2002,23(6):766?768.
[3] 牛鳳枝.基于OpenGL的三維場景再現(xiàn)研究[D].天津:河北工業(yè)大學(xué),2006.
[4] 潘忠英.基于OpenGL的三維可視化方法研究[J].計算機與數(shù)學(xué)工程,2014,42(3):512?516.
[5] 羅笑南,王若梅.計算機圖形學(xué)[M].3版.廣州:中山大學(xué)出版社,2008:110?123.
[6] 楊柏林,陳根浪,徐靜.OpenGL編程精粹[M].北京:機械工業(yè)出版社,2010:278?300.
[7] 朱煒.在Windows環(huán)境下設(shè)置基于VC++的OpenGL圖形接口[J].計算機與網(wǎng)絡(luò),2007(8):173?174.
[8] 周揚,劉永濤.基于OpenGL的事故三維綜合演示平臺[J].重慶理工大學(xué)學(xué)報(自然科學(xué)版),2015(4):77?80.
[9] 鄧軍勇,李濤,蔣林,等.面向OpenGL的圖形加速器設(shè)計與實現(xiàn)[J].西安電子科技大學(xué)學(xué)報(自然科學(xué)版),2015(3):143?149.
[10] 鄭佳榮,王強,占文鋒.三維建模方法研究現(xiàn)狀綜述[J].北京工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報,2013,12(4):5?7.
[11] 史俊,富剛.基于OpenGL的語音控制數(shù)控加工仿真的研究[J].現(xiàn)代電子技術(shù),2010,33(11):121?124.
[12] 王承祥,鞠建波,陶晨辰.基于VC++和OpenGL聲納浮標系統(tǒng)模擬器操作界面設(shè)計[J].現(xiàn)代電子技術(shù),2012,35(14):137?139.