喬保娟 李志山 劉春明 侯曉武 楊志勇
(1.中國建筑科學(xué)研究院,北京 100013;2.廣州大學(xué)廣東省地震工程與應(yīng)用技術(shù)重點實驗室,廣州 510415)
OpenGL圖形渲染技術(shù)在PKPM-SAUSAGE非線性分析軟件中的應(yīng)用
喬保娟1李志山2劉春明1侯曉武1楊志勇1
(1.中國建筑科學(xué)研究院,北京 100013;2.廣州大學(xué)廣東省地震工程與應(yīng)用技術(shù)重點實驗室,廣州 510415)
通過對目前比較常用的GDI繪圖和OpenGL繪圖進(jìn)行比較分析,顯示了用OpenGL開發(fā)的三維有限元圖形系統(tǒng)具有的速度快、繪圖功能強(qiáng)、捕捉方便、視覺效果好等優(yōu)越性。介紹了PKPM-SAUSAGE軟件三維模型繪圖流程,凹多邊形網(wǎng)格化顯示技術(shù),背面剔除及alpha混合,實時旋轉(zhuǎn)、平移、縮放算法和高效的捕捉算法,以及后處理結(jié)果平滑顯示技術(shù)和著色器編程顏色修正技術(shù)。最后通過工程實例驗證了PKPM-SAUSAGE軟件OpenGL圖形顯示、旋轉(zhuǎn)、平移、縮放及捕捉的高效性。
OpenGL;建筑結(jié)構(gòu);三維模型實時顯示;著色器編程;PKPM-SAUSAGE軟件
【DOI】 10.16670/j.cnki.cn11-5823/tu.2015.05.03
與普通機(jī)械CAD軟件相比,建筑結(jié)構(gòu)有限元分析軟件具有兩個特點:1)幾何對象體量大,通常包含數(shù)以百萬的幾何實體(構(gòu)件、單元等);2)對圖形渲染效率要求高,用戶期望建筑結(jié)構(gòu)的三維模型能夠?qū)崟r顯示,旋轉(zhuǎn)、平移、縮放和捕捉等交互操作流暢。這就對圖形渲染技術(shù)提出了很高的要求。
目前有不少建筑結(jié)構(gòu)有限元分析軟件是利用Windows提供的一套圖形設(shè)備接口GDI進(jìn)行圖形繪制。GDI是Windows下的通用的繪圖設(shè)備,它面向二維圖形的繪制,提供的繪圖函數(shù)有限,而且對計算機(jī)資源的占用也很多。因此,對于大型復(fù)雜的建筑結(jié)構(gòu)模型,其繪圖效率低的特點明顯暴露。并且,通過二維圖形工具來表達(dá)三維實體的形狀,生成的三維圖形立體感和真實感不但不強(qiáng),而且要通過大量的矩陣變換以及浮點計算等操作,尤其在對三維實體進(jìn)行旋轉(zhuǎn)、縮放、平移和拾取等操作時,其局限性更是難以克服。
OpenGL[1]是行業(yè)領(lǐng)域中最為廣泛接納的 2D/3D圖形API,是一個功能強(qiáng)大,調(diào)用方便的底層圖形庫,它獨立于窗口系統(tǒng)和操作系統(tǒng),具有良好的可移植性,在專業(yè)圖形處理、科學(xué)計算等高端應(yīng)用領(lǐng)域應(yīng)用廣泛。與傳統(tǒng)的GDI繪圖相比,OpenGL具有以下優(yōu)勢[2]:
(1)能充分利用顯卡的硬件加速功能。OpenGL的硬件加速由顯卡廠商在硬件中實現(xiàn)的,在安裝了顯卡廠商提供的顯卡驅(qū)動程序后,OpenGL程序就會有“加速”的效果。目前幾乎所有的顯卡都可以支持OpenGL硬件加速,在一臺使用高檔顯卡的微機(jī)上,可以達(dá)到工作站的水平。
(2) 具有強(qiáng)大的模型繪制功能。使用OpenGL可以很方便地繪制點、線、多邊形、曲線以及三維實體等元素。在利用OpenGL函數(shù)庫繪圖時,不用考慮圖形顯示的基本細(xì)節(jié),可以加快開發(fā)速度。
(3) 具有方便的選擇反饋功能。在二維繪圖程序中計算線段是否和鼠標(biāo)的拾取框相交很容易,但是在三維繪圖程序中,由于模型經(jīng)過了在空間中的多次旋轉(zhuǎn)、平移、縮放和投影變換,由用戶直接設(shè)計算法來拾取對象將比較困難。為此,OpenGL提供了選擇機(jī)制,為用戶拾取對象提供了方便。
(4) 具有通過光照處理能表達(dá)出物體三維特性的功能,具有很強(qiáng)的立體感。
(5) 提供著色器編程模型。允許開發(fā)人員編寫渲染算法在顯卡的GPU(Graphic Processor Unit圖形處理單元)上執(zhí)行,代替固定的渲染管線的一部分,達(dá)到一些特殊的渲染目的,使圖像更逼真。同時,著色器編程模型采用GPU并行也釋放了CPU空間,提高了圖形渲染效率。
可見,OpenGL比GDI更適合有限元三維圖形系統(tǒng)的開發(fā),是當(dāng)前開發(fā)有限元分析軟件前、后處理圖形系統(tǒng)的理想選擇。本文將以PKPM-SAUSAGE軟件(簡稱SAUSAGE)為例,探討OpenGL圖形渲染技術(shù)在大規(guī)模復(fù)雜建筑結(jié)構(gòu)有限元分析前后處理中的應(yīng)用。
2.1 SAUSAGE軟件架構(gòu)
SAUSAGE軟件基于MFC創(chuàng)建,程序模塊化設(shè)計,采用面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu),具有良好的可移植性和擴(kuò)展性。SAUSAGE軟件代碼分層隔離,包括數(shù)據(jù)交換層、數(shù)據(jù)及邏輯層、繪圖層、界面控制層等四個層次。
(1)數(shù)據(jù)交換層:輸入輸出文件、接口等;
(2)繪圖層:繪圖封裝庫;
(3)數(shù)據(jù)及邏輯層:與業(yè)務(wù)有關(guān)的功能和數(shù)據(jù)定義,由細(xì)到粗分級封裝,使數(shù)據(jù)結(jié)構(gòu)和程序邏輯清晰,易于跟蹤;
(4)界面控制層:用戶交互操作,消息處理,對話框形式的數(shù)據(jù)輸入,報表顯示等;
其中,本文討論的基于OpenGL的圖形渲染技術(shù)即封裝在繪圖層中。
2.2 三維模型繪圖流程
在設(shè)置好像素格式、光源參數(shù)(光源性質(zhì)、光源位置)、顏色模式(索引、RGBA)等OpenGL參數(shù)之后,SAUSAGE軟件根據(jù)建筑結(jié)構(gòu)梁、柱、板、墻、阻尼器、隔振支座等各類構(gòu)件的幾何位置及截面尺寸,計算出繪制三維模型構(gòu)件圖元頂點在世界坐標(biāo)系中的坐標(biāo)。世界坐標(biāo)系中的坐標(biāo)經(jīng)過視圖/模型變換、投影變換和視口變換后轉(zhuǎn)為屏幕坐標(biāo),這樣建筑結(jié)構(gòu)的三維模型圖便顯示在計算機(jī)屏幕上了。建筑結(jié)構(gòu)三維模型繪圖流程如圖1 所示。
圖1 建筑結(jié)構(gòu)三維模型繪圖流程
(1)視圖/模型變換
視圖/模型變換的作用是將世界坐標(biāo)系表示的模型變換到觀察坐標(biāo)系中。計算機(jī)圖像技術(shù)中,基于固定物體位置移動相機(jī)(視圖變換),或者基于固定相機(jī)位置移動被測物體(模型變換),得到效果是一樣的,它們實際是等效的。因此,SAUSAGE軟件中采用一個轉(zhuǎn)換矩陣進(jìn)行視圖變換和模型變換。
(2)投影變換
投影變換的目的是將觀察坐標(biāo)系表示的模型變換到OpenGL坐標(biāo)系中。投影變換有兩種:1)透視投影:這種投影的效果與人眼觀察世界的效果相同,距離視點越遠(yuǎn)的物體看起來越小,距離視點越近的物體看起來越大;2)正交投影:特點是無論物體距離視點多遠(yuǎn),投影后的尺寸不變,常用于建筑藍(lán)圖和計算機(jī)輔助設(shè)計的應(yīng)用程序;在這類應(yīng)用程序中,當(dāng)物體經(jīng)過投影之后,保持它們的實際大小以及它們之間的角度是至關(guān)重要的;SAUSAGE軟件采用正交投影。
(3)視口變換
視口是指計算機(jī)屏幕中的矩形繪圖區(qū)域,它用窗口坐標(biāo)來度量,反映了屏幕上的像素位置。視口變換就是將視景體內(nèi)投影的物體顯示在二維的視口平面上,這個過程類似于將照片放大或縮小。視口變換中視口的寬高比通常等于視景體的寬高比,否則視口內(nèi)顯示的圖形將會發(fā)生形變。
在SAUSAGE前處理中,各種構(gòu)件、單元的顏色由軟件/用戶指定。后處理中,軟件將彈塑性時程分析結(jié)果的數(shù)值映射到顏色空間中,通過節(jié)點/單元的顏色來反應(yīng)結(jié)構(gòu)不同部位的位移、應(yīng)力、應(yīng)變、損傷以及內(nèi)力等彈塑性時程分析結(jié)果的數(shù)值分布。
2.3 凹多邊形板的繪制
OpenGL中認(rèn)為合法的多邊形必須是凸多邊形,凹多邊形、自交多邊形、帶孔的多邊形等非凸多邊形在OpenGL中繪制會出現(xiàn)出乎意料的結(jié)果。簡單多邊形可被快速地渲染,而復(fù)雜多邊形難以快速檢測出來。為了最大限度的提高性能,OpenGL假定多邊形是簡單的。而對于真實的建筑結(jié)構(gòu),由于板、墻開洞等經(jīng)常會有凹多邊形或帶孔多邊形出現(xiàn),如果人為將這類多邊形拆分成凸多邊形,將會把一個完整的構(gòu)件拆分成多個構(gòu)件,這不是結(jié)構(gòu)設(shè)計師所期望的。
為了正確顯示凹多邊形板、墻,SAUSAGE軟件采用GLU庫中多邊形網(wǎng)格化對象GLUtesselator,對凹多邊形進(jìn)行網(wǎng)格化,將它們分解成一組簡單的、能夠進(jìn)行渲染的OpenGL多邊形。網(wǎng)格化實際上是在把頂點傳入OpenGL管線之前,先將其傳到網(wǎng)格化對象,網(wǎng)格化對象處理完后,再把處理后的頂點傳入到OpenGL渲染管線。對凹多邊形網(wǎng)格化顯示,僅是圖形顯示上的處理,不會拆分構(gòu)件,對建筑結(jié)構(gòu)的三維模型沒有任何影響。對凹多邊形進(jìn)行網(wǎng)格化顯示前后的效果對比如圖2所示,圖中選中樓板(粉色)平面形狀為凹多邊形。
圖2 網(wǎng)格化顯示凹多邊形效果
2.4 背面剔除與alpha混合
在SAUSAGE軟件前處理中,繪制建筑結(jié)構(gòu)三維模型圖時,為了加快繪圖速度,采用了OpenGL深度測試剔除背面功能。屏幕的深度緩存默認(rèn)值為1(最遠(yuǎn)),顏色緩存則被初始化為背景顏色。所有的碎片處理完之后,它們的Z值與緩存中的值比較。如果Z值比緩存中對應(yīng)的Z值小,那么碎片的Z值和顏色值就會被寫入緩存中。否則,認(rèn)為正準(zhǔn)備輸出顯示的碎片被其他物體(碎片)擋住了,直接忽略。這種算法不會受到碎片處理順序的影響。
在SAUSAGE軟件后處理中,在顯示位移、應(yīng)力、應(yīng)變、內(nèi)力和損傷等彈塑性時程分析結(jié)果云圖時,為了方便用戶觀察整體結(jié)構(gòu)的計算結(jié)果分布,對三維模型云圖進(jìn)行了alpha混合處理。RGBA顏色模式中包含一個alpha值,即透明度。alpha值的范圍為[0,1],0代表完全透明,1代表不透明。經(jīng)過alpha混合處理后,透過建筑結(jié)構(gòu)構(gòu)件可以看到它后面的構(gòu)件的彈塑性時程分析結(jié)果云圖。alpha混合與背面剔除是互斥的,不能同時存在?;旌瞎饺缦拢?/p>
(1)
其中,c 為最終顯示顏色,cs是原顏色,αs是原透明度(alpha),cd是目的位置顏色(背景顏色),三個顏色通道(RGB)獨自進(jìn)行混合。混合公式中,碎片順排序很重要,它們必須是從“后面”到“前面”的順序,最大深度的最先處理。
3.1 平移、旋轉(zhuǎn)和縮放
實時平移、旋轉(zhuǎn)和縮放是查看三維有限元模型時必不可少的操作。在GDI繪圖中,實現(xiàn)這3個操作比較困難,而且容易造成屏幕閃爍。在OpenGL繪圖時,只需對視點位置和參考點位置進(jìn)行簡單的變換操作就可以實現(xiàn)。
在SAUSAGE軟件中,平移需要同時改變視點和參考點的位置。旋轉(zhuǎn)和平移類似,只是保持參考點不變,并保持視點和參考點的距離不變。如果旋轉(zhuǎn)中心不是模型的幾何中心,旋轉(zhuǎn)后應(yīng)該重新計算裁剪平面,以避免模型被裁剪??s放只需要改變視景體的大小即可實現(xiàn)。窗口縮放算法是用鼠標(biāo)在屏幕上拖出矩形框,將此框內(nèi)的圖形放大到整個屏幕,具體做法是,首先將矩形框的中心點對應(yīng)的物體點移動到屏幕中心點,再計算圖形放大倍數(shù),以寬度方向放大倍數(shù)為準(zhǔn)。
將視點、參考點的移動距離和縮放比例等與鼠標(biāo)操作關(guān)聯(lián)起來,就可以實現(xiàn)鼠標(biāo)操作的實時平移、旋轉(zhuǎn)和縮放。
3.2 三維模型捕捉技術(shù)
在有限元建模軟件中,很多時候都需要用戶和圖形對象之間進(jìn)行交互操作,如用鼠標(biāo)選擇模型中的一個節(jié)點查看或修改該點的荷載和約束信息,或者選擇一個梁柱構(gòu)件查看或修改截面、材料等信息。OpenGL提供了選擇機(jī)制,為用戶拾取對象提供了方便。
在選擇模式下,SAUSAGE軟件根據(jù)鼠標(biāo)的位置在OpenGL中定義一個狹長的視景體,像一條垂直于屏幕的細(xì)長射線,在繪制一個對象之前對其進(jìn)行命名,OpenGL將落在這個視景體內(nèi)的對象名稱存儲在一個堆棧里,即選擇緩沖區(qū)。選擇緩沖區(qū)包括多條拾取記錄,每條拾取記錄由4部分組成:對象名稱的個數(shù),對象的最小z坐標(biāo) (z-min),對象的最大z坐標(biāo) (z-max)和對象名稱。遍歷緩沖區(qū)中的所有記錄,綜合考慮z-min、z-max及圖元結(jié)構(gòu)類型(可由圖元名稱得到)對圖元進(jìn)行排序。若捕捉單個圖元,則排序后的第一個圖元將被選中;若框選一組圖元,則選擇緩沖區(qū)中的所有圖元都被選中。
與GDI繪圖相比,OpenGL的最大優(yōu)勢是應(yīng)力、位移等都是空間的,更能真實地反映實際情況,尤其是在繪制彩色云圖上,OpenGL有極大的優(yōu)勢。
4.1 后處理結(jié)果平滑顯示技術(shù)
SAUSAGE軟件后處理主要是為了顯示節(jié)點的位移,以及單元的應(yīng)力、應(yīng)變、內(nèi)力、損傷等彈塑性分析結(jié)果,主要包括模態(tài)分析各階振型變形云圖,靜力分析節(jié)點位移云圖,動力分析節(jié)點位移云圖、速度云圖、加速度云圖、單元應(yīng)力云圖、單元應(yīng)變云圖、單元損傷云圖、鋼筋塑性應(yīng)變云圖、鋼材塑性應(yīng)變云圖、單元內(nèi)力云圖等。
由于 OpenGL本身具有顏色均勻過渡的能力,使繪制彩色云圖十分方便。要生成彩色云圖,先建立各節(jié)點的應(yīng)力值或位移值與顏色值的對應(yīng)關(guān)系;然后,將最大值和最小值之間分成若干段,分別對應(yīng)不同的顏色,采用線性插值可求得其他量值對應(yīng)的顏色值。這種顏色對應(yīng)關(guān)系比較形象地反映了各種應(yīng)力或位移的分布。由于應(yīng)力、損傷等計算結(jié)果是單元中心的值,需要用體積加權(quán)的方法轉(zhuǎn)換成單元節(jié)點上的值,然后求出其顏色值。這樣,利用OpenGL多邊形自動顏色過渡填充的功能就可以生成彩色云圖。
為了提高云圖顯示效果,使顏色顯示更平滑,SAUSAGE軟件還提供單元形心及單元邊線中點參與著色的方法。具體做法是,連接單元頂點、邊線中點及單元形心,將單元剖分成多個小四邊形(三角形單元剖分成三個小四邊形,四邊形單元剖分成四個小四邊形),單元頂點顏色為與之相鄰的幾個單元彈塑性分析結(jié)果平均值對應(yīng)的顏色,單元邊線中點顏色為與之相鄰的兩個單元彈塑性分析結(jié)果平均值對應(yīng)的顏色,單元形心顏色為本單元彈塑性分析結(jié)果對應(yīng)的顏色,繪制單元時,將單元按剖分的多個小四邊形來繪制。這樣繪制的圖形顏色過渡更均勻,且避免了平均引起的單元彈塑性分析結(jié)果最大值被削弱。某結(jié)構(gòu)底部剪力墻損傷云圖單元邊線及形心是否參與著色效果對比如圖3。
4.2 著色器編程顏色修正技術(shù)
有限元分析計算結(jié)果的圖形顯示直觀明了,用戶通過觀察單元顏色即可快速了解計算結(jié)果的數(shù)值分布,判斷結(jié)構(gòu)薄弱部位,十分方便。但OpenGL多邊形自動顏色過渡填充功能必然會帶來一個問題,OpenGL的顏色平均為RGB值的平均,得到的顏色與計算結(jié)果平均后對應(yīng)的顏色有偏差。比如,圖4中A點顏色為(255,0,0),C點顏色為(0,255,0),E點顏色為(0,0,255),OpenGL自動計算的B點顏色為(A+C)/2=(127,127,0),D點顏色為(C+E)/2=(0,127,127),F(xiàn)點顏色為(D+B)/2=(63,127,63),而F點顏色的正確值應(yīng)為(0,255,0),也即C點顏色,這就需要對顏色進(jìn)行修正,將F點拉倒C點。
圖3 單元形心及邊線中點是否參與著色效果對比
圖4 顏色修正示意圖
該部分采用了著色器編程技術(shù),在輸出圖形時,由顯卡GPU修正每個像素的顏色,具體實現(xiàn)代碼如圖5,由于采用了GPU并行,圖形顯示效率很高。
某大底盤多塔結(jié)構(gòu),47層,高168.7m,四個塔樓均為框架核心筒結(jié)構(gòu),平面尺寸分別為58.7m×41.9m,52.1m×41.2m,58m×26.4m和58m×26.4m。三維模型實體圖如圖6,為了提高圖形顯示效率,采用了OpenGL背面剔除功能。彈塑性動力時程分析損傷云圖如圖7,圖中左上角小圖為局部放大效果,為了方便用戶查看整體結(jié)構(gòu)的損傷分布,采用了alpha混合的透明效果。
該結(jié)構(gòu)三維模型在構(gòu)件實體顯式模式下,旋轉(zhuǎn)、平移和縮放重繪速率為35.2fps(每秒傳輸幀數(shù))。
單元顯式模式下,旋轉(zhuǎn)、平移和縮放重繪速率11.7fps。后處理細(xì)分單元顯示損傷云圖時,重繪速率為5.6fps??梢?,在SAUSAGE軟件中,大規(guī)模復(fù)雜結(jié)構(gòu)在三維模型旋轉(zhuǎn)、平移和縮放時,圖形重繪速率高,用戶操作體驗是很流暢的。
該結(jié)構(gòu)捕捉刷新速率為149.6fps,可見,在SAUSAGE軟件中,捕捉效率是相當(dāng)高的,達(dá)到了實時捕捉的效果。
圖5 著色器編程顏色修正并行代碼
圖6 某建筑結(jié)構(gòu)三維模型實體圖
圖7 某建筑結(jié)構(gòu)彈塑性分析損傷云圖
本文簡要介紹了SAUSAGE軟件的三維模型繪圖流程和凹多邊形網(wǎng)格化顯示技術(shù),軟件采用OpenGL背面剔除功能以提高三維模型的繪圖效率,采用alpha混合功能以提升彈塑性時程分析結(jié)果云圖顯示效果。同時介紹了SAUSAGE軟件交互操作的實現(xiàn)算法,包括實時旋轉(zhuǎn)、平移和縮放算法以及高效的捕捉算法。在后處理中,SAUSAGE軟件通過細(xì)分單元使單元形心及邊線中點參與著色的方法,使彈塑性時程分析結(jié)果云圖顯示更平滑、逼真,采用著色器編程技術(shù)修正OpenGL多邊形自動顏色過渡填充功能帶來的顏色失真問題。最后,通過工程實例驗證了OpenGL圖形顯示、旋轉(zhuǎn)、平移、縮放及捕捉的高效性。
[1]OpenGL編程指南[M]. 北京:機(jī)械工業(yè)出版社,2009.
[2]陳俊濤,肖明,鄭永蘭. 用OpenGL開發(fā)地下結(jié)構(gòu)工程三維有限元圖形系統(tǒng)[J].巖石力學(xué)與工程學(xué)報. 2006,25(5).
Application of OpenGL Graphics Rendering Technology in the Nonlinear Analysis Software of PKPM-SAUSAGE
Qiao Baojuan1, Li Zhishan2, Liu Chunming1, Hou Xiaowu1, Yang Zhiyong1
(1ChinaAcademyofBuildingResearch,Beijing100013,China; 2EarthquakeEngineeringResearch&TestCenterofGuangzhouUniversity,Guangzhou510405,China)
In this paper,the superiorities of 3D finite element graphics system developed by OpenGL, such as high speed,powerful drawing function,convenient selection and feedback and nice visual effect are demonsrated through the comparison between GDI and OpenGL,which are both popular in graphics system at present. The paper also introduces drawing process of 3D model by OpenGL, display technology of concave polygon, back face culling and alpha blending, real-time rotation, translation, scaling, and efficient capture algorithm of PKPM-SAUSAGE software as well as the results display smoothing technology and color correction technology by shader programming in post-processing. Finally, the efficiency of OpenGL graphics display, rotation, translation, scaling and capture in PKPM-SAUSAGE software is verified by practical engineering examples.
OpenGL; Building Structure; 3D Model Real-time Display; Shader Programming; PKPM-SAUSAGE
國家科技支撐計劃課題(2014BAH25F02);教育部創(chuàng)新團(tuán)隊(IRT13057)
喬保娟(1987-),女,工程師。主要從事軟件研發(fā)工作。
TU311.41
A
1674-7461(2015)05-0013-06