王功琰,王子茹
(大連理工大學(xué)建設(shè)工程學(xué)部,遼寧大連116024)
隨著經(jīng)濟社會的發(fā)展,越來越多的公路和水利工程項目需要開展,而涵洞作為公路工程和水利工程中的重要附屬建筑物,在其設(shè)計上已改變了傳統(tǒng)的手工設(shè)計方法,實現(xiàn)了二維計算機輔助設(shè)計(CAD)。但是并沒有改變設(shè)計成果不直觀的狀況。計算機科學(xué)可視化技術(shù)的發(fā)展,為設(shè)計者和決策者提供了可視化仿真模型,以便在工程設(shè)計階段就能看到建成后的工程情景[1]。所以,工程設(shè)計成果三維可視化技術(shù)日益受到工程界的重視。文獻[2]提出了以AutoCAD為圖形平臺,引入道路信息模型(RIM)概念,采用ObjectARX技術(shù)開發(fā)了三維涵洞設(shè)計CAD。文獻[3]研究了三維隧道CAD系統(tǒng),設(shè)計中采用了三維可視化技術(shù),實現(xiàn)了隧道洞門的三維動態(tài)交互式設(shè)計功能。國外關(guān)于涵洞三維可視化的研究主要是作為道路工程中的附屬物來研究,缺乏針對性,同時其設(shè)計思路不適應(yīng)我國的設(shè)計規(guī)范和設(shè)計習(xí)慣,而二次開發(fā)工作也僅限于系統(tǒng)的外圍開發(fā),很難涉及到系統(tǒng)的內(nèi)核。
由于涵洞工程自身的特點,目前三維可視化研究的并不多?;谶@樣一種現(xiàn)實背景,本文提出基于OpenGL的涵洞三維可視化系統(tǒng)。該系統(tǒng)基于MFC應(yīng)用框架,采用OpenGL三維圖形技術(shù)標(biāo)準(zhǔn),并結(jié)合《水工混凝土結(jié)構(gòu)設(shè)計規(guī)范》[4](SL191-2008)完成洞身結(jié)構(gòu)設(shè)計、驗算校核以及三維配筋,實現(xiàn)設(shè)計成果可視化表達,旨在為涵洞三維設(shè)計提供新方法和途徑。
根據(jù)該系統(tǒng)的功能將其分成三大模塊:參數(shù)化建模模塊、結(jié)構(gòu)設(shè)計模塊、自動繪圖模塊,每一模塊下設(shè)有二級菜單。系統(tǒng)總框架如圖1所示,系統(tǒng)總界面如圖2所示。
圖1 系統(tǒng)總框架
圖2 系統(tǒng)總界面
每一模塊的功能如下:
1.1.1 參數(shù)化模塊
功能:通過交互式輸入?yún)?shù)完成涵洞的三維建模。
本系統(tǒng)建模數(shù)據(jù)完全依據(jù)實際工程中工程布置和水力設(shè)計形成的二維平面尺寸,即依據(jù)設(shè)計流量、進出口水深來確定洞身斷面尺寸。圖3為蓋板涵參數(shù)化輸入對話框。
1.1.2 結(jié)構(gòu)設(shè)計模塊
功能:輸入基本參數(shù)完成荷載、內(nèi)力、配筋、校核等自動計算。
該模塊計算依據(jù)《水工混凝土結(jié)構(gòu)設(shè)計規(guī)范》(SL191-2008)、《結(jié)構(gòu)力學(xué)》等相關(guān)規(guī)范編制[4-5],其中包括荷載計算、內(nèi)力計算、配筋計算、校核驗算等。圖4為單孔蓋板涵的內(nèi)力計算簡圖。
圖3 參數(shù)化輸入對話框
圖4 單孔蓋板涵洞計算簡圖
洞身鋼筋混凝土結(jié)構(gòu)計算:進行正截面受彎承載能力極限狀態(tài)計算,計算步驟如下:
(1)計算截面矩抵抗系數(shù)αs。
(2)根據(jù)αs值計算受壓區(qū)相對高度ξ。
(3)如果ξ值不能滿足使用條件ξ≤ξb,則需要加大截面尺寸或提高混凝土強度等級重新計算;如果滿足使用條件則按式(3)計算受拉鋼筋面積As。
式中:As為縱向受拉鋼筋面積(mm2);fy為普通鋼筋抗拉強度設(shè)計值(N/mm2)。
經(jīng)過計算和校核后自動實現(xiàn)三維配筋,并結(jié)合三維線框模型完成三維顯示。結(jié)構(gòu)設(shè)計對話框如圖5所示。
圖5 結(jié)構(gòu)計算對話框
1.1.3 自動繪圖模塊
功能:在MFC應(yīng)用程序框架的視類CCulvert-View中來完成三維模型和三維配筋的繪制、更新、旋轉(zhuǎn)、縮放等。
本系統(tǒng)任何物體的繪制都在View類Render-Scene()中完成的,為了方便管理和識別,特別添加對應(yīng)的繪制函數(shù)如DrawSlabculvert()、DrawSteel()來分別繪制蓋板涵洞模型和三維鋼筋。
1.2.1 基于MFC的OpenGL應(yīng)用程序框架
VC++是一個目前功能最為強大的程序開發(fā)平臺之一。利用MFC程序框架進行應(yīng)用程序設(shè)計,是VC++最有效、最強大的部分。利用VC++中AppWizard工具生成一個基于單文檔的應(yīng)用程序框架,并設(shè)置OpenGL圖形繪制環(huán)境[6],創(chuàng)建三維動態(tài)空間。
(1)首先將需要的GLUT頭文件,DLL和Lib文件拷貝至相應(yīng)文件夾,并將glut32.dll和 glut.dll放到所創(chuàng)建的應(yīng)用程序的運行目錄下。
圖6 加入鏈接庫文件
(2)創(chuàng)建一個MFC SDI應(yīng)用程序,命名為Culvert,并在項目屬性中加入所需要鏈接的庫文件,如圖6所示。(3)設(shè)置窗口風(fēng)格、建立像素格式和繪制上下文,實現(xiàn)初始化 OpenGL,在 InitializeOpenGL()中創(chuàng)建一個設(shè)備上下文(DC),為這個DC選擇一個像素格式,創(chuàng)建和這個DC相關(guān)的繪制上下文(RC),然后選擇這個RC。這個函數(shù)會調(diào)用SetupPixelFormat()來建立像素格式。
(4)設(shè)置視口和視錐,基本操作包括設(shè)置視口,選擇投影矩陣,設(shè)置模型視圖矩陣[7]。最后設(shè)置繪制場景,包括清空緩存、繪制場景、Flush渲染流水線,若設(shè)置了雙緩沖,則交換前后臺緩沖區(qū)。
至此便完成了三維動態(tài)空間的創(chuàng)建。
1.2.2 圖元的繪制與編輯
在OpenGL中,所有幾何圖元最終都是由這些圖元的頂點(vertex)來描述的。使用glVertex*()函數(shù)來指定頂點。同時可以在調(diào)用函數(shù)之前,可以為所指定的頂點指定顏色、法線方向、邊界標(biāo)志、紋理坐標(biāo)等。這些頂點連同頂點信息將被組合成圖元。
為了使可視化模塊提供的視圖變換、投影變換、裁剪變換、視區(qū)變換等功能,實現(xiàn)動態(tài)視圖,從而可以變換屏幕上圖形的顯示方式,更清楚地表現(xiàn)三維模型的物理和幾何特性。在OpenGL中要實現(xiàn)這些功能就要利用矩陣操作來實現(xiàn)的。常用的矩陣函數(shù)包括glPushMatrix()、glPopMatrix()等,前者保存當(dāng)前矩陣,后者拋出當(dāng)前矩陣。
1.2.3 數(shù)據(jù)交互式輸入
為了實現(xiàn)數(shù)據(jù)交互式輸入,VC++中通過Do-DataExchange(CDataExchange* pDX)完成對話框類和對話框控件的數(shù)據(jù)交換,如圖7所示。MFC提供了類CDataExchange來實現(xiàn)數(shù)據(jù)交換(DDX),該類還提供數(shù)據(jù)有效機制(DDV)。調(diào)用UpdateData(TRUE)時,將數(shù)據(jù)從控件傳遞給相應(yīng)的關(guān)聯(lián)成員變量,調(diào)用UpdateData(FALSE)時,將數(shù)據(jù)從成員變量返回到相應(yīng)控件中[8]。
圖7 成員變量與控件的數(shù)據(jù)交換
1.2.4 圖像處理技術(shù)
(1)顏色
OpenGL所執(zhí)行的所有計算(涉及OpenGL函數(shù)、狀態(tài)信息和參數(shù)值)就是確定將要在窗口中繪制的每個像素的最終顏色[9]。在彩色計算機屏幕上,硬件裝置使屏幕上的每個像素發(fā)射不同數(shù)量的紅、綠、藍。這幾種顏色的數(shù)量分別被稱為R、G和B值。R、G和 B值的范圍從0.0(無)到1.0(完全強度)。
用于指定物體的顏色的命令如下:
(2)光照
OpenGL計算最終顯示的場景中每個像素的顏色。這種計算工作包括:創(chuàng)建光源,激活光照和光源,以及定義物體的材質(zhì)。創(chuàng)建光源是要定義光源的特征,物體的材質(zhì)則與光源一起決定到達人眼的光的顏色。若光源顏色為(LR,LG,LB),材質(zhì)顏色為(MR,MG,MB),則到達人眼的顏色為(LR*MR,LG*MG,LB*MB)。
光源具有幾種屬性,例如顏色、位置和方向等。用于指定所有光源屬性的函數(shù)式glLight*()。它的3個參數(shù)確定了它所指定的是哪個光源屬性、具體的屬性以及這個屬性的預(yù)想值。依據(jù)計算機圖形學(xué)和圖像處理技術(shù),設(shè)置材質(zhì)、顏色以及光照等完成三維模型顯示和渲染。
某單孔鋼筋混凝土無壓蓋板涵洞,蓋板頂面至填土頂面的最大填土高度Hd=2.0 m,填土內(nèi)摩擦角 φ =30°,洞身凈寬 B=2.0 m,凈高 H=2.0 m,蓋板厚d2=0.2 m,側(cè)墻與底板為整體式連接,底板厚d1=0.3 m,側(cè)墻為等厚d3=0.25 m。地基為密實砂類土,地下水位低于洞底無地面荷載。洞身橫剖面結(jié)構(gòu)尺寸如圖8所示。
圖8 洞身結(jié)構(gòu)尺寸
本涵洞的過水流量為5.5 m3/s,洞長10 m,按最新規(guī)范規(guī)定,相應(yīng)建筑物級別為4級。洞身混凝土強度等級采用C20。試計算洞身蓋板、側(cè)墻、底板各控制截面的內(nèi)力并進行鋼筋混凝土結(jié)構(gòu)計算。
根據(jù)所給蓋板涵各構(gòu)件的尺寸,依次交互式輸入蓋板、側(cè)墻、底板以及端墻等。圖9為三維線框模型。
圖9 三維線框模型
本例為鋼筋混凝土蓋板涵,蓋板、側(cè)墻及底板的內(nèi)力除彎矩外,還有軸力。由于蓋板涵洞的規(guī)模較小,彎矩值也相對較小,為簡化計算,鋼筋混凝土及混凝土結(jié)構(gòu)計算時,可不考慮軸向力影響。蓋板、側(cè)墻及底板均近似按受彎構(gòu)件計算,計算結(jié)果偏于安全。
鋼筋混凝土結(jié)構(gòu)按《水工混凝土結(jié)構(gòu)設(shè)計規(guī)范》[4](SL191-2008)分別進行正截面承載能力極限狀態(tài)計算和正常使用極限狀態(tài)驗算,圖10為三維配筋圖。
最后結(jié)合OpenGL渲染技術(shù)實現(xiàn)涵洞三維模型渲染,如圖11所示。
圖10 三維配筋
圖11 三維渲染模型
在工程設(shè)計領(lǐng)域,設(shè)計手段從傳統(tǒng)的手工繪圖到二維計算機輔助設(shè)計,再到三維可視化設(shè)計,無不依賴于計算機硬件的提升和可視化技術(shù)的發(fā)展。本文基于MFC應(yīng)用程序框架,采用開放式三維圖形標(biāo)準(zhǔn),依據(jù)相關(guān)技術(shù)規(guī)范,研究基于OpenGL涵洞三維可視化系統(tǒng),通過實例實現(xiàn)了蓋板涵洞三維可視化,此項研究對涵洞前期設(shè)計的方案比選有一定應(yīng)用價值。
[1]王子茹.堤壩透視投影及圖形可視化研究[D].大連:大連理工大學(xué),2005.
[2]劉國圖,周 淼,郭騰峰.基于道路信息模型(RIM)技術(shù)的三維涵洞CAD系統(tǒng)研究與開發(fā)[J].交通科技,2010,(B07):1-5.
[3]郭幼蓓,劉向陽,郭騰峰.三維隧道CAD系統(tǒng)的研發(fā)與應(yīng)用[J].交通科技,2010,(B07):44-47.
[4]中華人民共和國水利部.SL191—2008.水工混凝土結(jié)構(gòu)設(shè)計規(guī)范[S].北京:中國水利水電出版社,2008.
[5]龍馭球,包世華.結(jié)構(gòu)力學(xué)教程:II[M].北京:高等教育出版社,2005.
[6]郭兆榮,李 菁,王 彥.Visual C++OpenGL應(yīng)用程序開發(fā)[M].北京:人民郵電出版社,2006.
[7]安杰爾,吳文國.交互式計算機圖形學(xué):基于OpenGL的自頂向下方法[M].北京:清華大學(xué)出版社,2006.
[8]孫 鑫,余安萍.VC++深入詳解[M].北京:電子工業(yè)出版社,2006.
[9]楊淑瑩.VC++圖像處理程序設(shè)計[M].北京:清華大學(xué)出版社,2003.