黃聲享,沈鳳嬌,張翠峰
(武漢大學(xué) 測繪學(xué)院,武漢 430079)
GPS幾何監(jiān)測系統(tǒng)的三維可視化設(shè)計(jì)與初步實(shí)現(xiàn)
黃聲享,沈鳳嬌,張翠峰
(武漢大學(xué) 測繪學(xué)院,武漢 430079)
現(xiàn)代GPS幾何監(jiān)測系統(tǒng)的數(shù)據(jù)采樣率高,監(jiān)測點(diǎn)數(shù)多,數(shù)據(jù)管理與利用的可視化技術(shù)能使這些數(shù)據(jù)信息生動(dòng)、直觀。文中以VC++6.0為開發(fā)工具、OpenGL為圖形接口,利用OpenGL提供的幾何建模、光照等特性,結(jié)合蘇通大橋 GPS監(jiān)測系統(tǒng)數(shù)據(jù),設(shè)計(jì)并初步實(shí)現(xiàn)三維監(jiān)測數(shù)據(jù)的動(dòng)態(tài)可視化顯示。
GPS;幾何監(jiān)測;可視化;OpenGL
隨著計(jì)算機(jī)技術(shù)的發(fā)展,可視化的概念已經(jīng)得到大大擴(kuò)展,它不僅包括科學(xué)計(jì)算可視化,而且包括工程數(shù)據(jù)和測量數(shù)據(jù)的可視化[1]。
在建筑物的實(shí)時(shí)監(jiān)測系統(tǒng)中,監(jiān)測數(shù)據(jù)的可視化可以非常清楚、直觀地反映出結(jié)構(gòu)物的動(dòng)態(tài)變化情況,更容易呈現(xiàn)對被監(jiān)測對象的工作狀態(tài)、荷載能力等的監(jiān)測。因此,對監(jiān)測數(shù)據(jù)信息的可視化,是大型結(jié)構(gòu)物實(shí)時(shí)動(dòng)態(tài)監(jiān)測系統(tǒng)中必不可少的功能之一[2]。GPS由于其具有的全天候、高精度、高效率、自動(dòng)化等優(yōu)點(diǎn),目前,已廣泛應(yīng)用在工程建(構(gòu))筑物的監(jiān)測。GPS動(dòng)態(tài)監(jiān)測的數(shù)據(jù)采樣率已可設(shè)置到10~20 Hz,多點(diǎn)全天候工作的 GPS監(jiān)測系統(tǒng),其數(shù)據(jù)量顯得非常大,迫切需要實(shí)時(shí)、動(dòng)態(tài)的一維、二維和三維可視化技術(shù)作為支撐。
至今已有許多繪圖軟件能夠?qū)崿F(xiàn)數(shù)據(jù)的可視化,比如:目前,常用的3DM AX建模軟件,但它很難用于實(shí)時(shí)的數(shù)據(jù)建模;AutoCAD提供了二次開發(fā)的功能,但是不能實(shí)現(xiàn)實(shí)時(shí)刷新,也很難用于數(shù)據(jù)的實(shí)時(shí)動(dòng)態(tài)顯示。OpenGL作為底層圖形開發(fā)工具,是獨(dú)立于操作系統(tǒng)和硬件環(huán)境的三維圖形庫,具有強(qiáng)大的圖形和跨平臺的能力,目前,已被廣泛應(yīng)用于實(shí)體造型、模擬仿真、CAD/CAM等諸多領(lǐng)域[3-5]?,F(xiàn)代橋梁實(shí)時(shí)幾何監(jiān)測系統(tǒng)也有采用OpenGL進(jìn)行可視化的嘗試,如虎門大橋的監(jiān)測系統(tǒng)中加入了三維位移實(shí)時(shí)動(dòng)態(tài)演示系統(tǒng)[6]。
本文以VC++6.0為開發(fā)工具,OpenGL為圖形接口,設(shè)計(jì)并初步實(shí)現(xiàn)了GPS幾何監(jiān)測系統(tǒng)的可視化,包括一維的三方向位移時(shí)程可視化、二維平面位移可視化和三維空間動(dòng)態(tài)可視化等功能。
結(jié)合蘇通大橋 GPS幾何監(jiān)測系統(tǒng)[7]的實(shí)測數(shù)據(jù)進(jìn)行可視化建模。該遠(yuǎn)程 GPS動(dòng)態(tài)幾何監(jiān)測系統(tǒng)由基準(zhǔn)站、監(jiān)測站、監(jiān)控中心和數(shù)據(jù)通訊等部分組成?;鶞?zhǔn)站接收視場內(nèi)所有的 GPS衛(wèi)星信號得到差分信息,并通過通訊鏈將這些信息發(fā)送給監(jiān)測站;監(jiān)測站一方面跟蹤視場內(nèi)的 GPS衛(wèi)星得到自己的載波觀測值;另一方面接收來自基準(zhǔn)站的差分信息,通過GPS軟件實(shí)時(shí)處理得到監(jiān)測點(diǎn)的三維坐標(biāo),并隨GPS采樣頻率而實(shí)時(shí)地更新坐標(biāo),同時(shí)將其發(fā)送到監(jiān)控中心;監(jiān)控中心采用數(shù)據(jù)處理軟件,對數(shù)據(jù)進(jìn)行處理與分析,得到監(jiān)測點(diǎn)在不同方向上的位移參數(shù),實(shí)時(shí)地對其進(jìn)行可視化顯示,并存入動(dòng)態(tài)數(shù)據(jù)庫中。
通過一維可視化建模可以得到監(jiān)測點(diǎn)單一方向的位移時(shí)程曲線,能夠反映監(jiān)測部位的動(dòng)態(tài)性和振幅范圍,進(jìn)一步分析可以診斷其結(jié)構(gòu)的穩(wěn)定性;通過監(jiān)測數(shù)據(jù)的二維可視化分析監(jiān)測點(diǎn)的平面位移情況,觀察其平面變化的平衡位置及范圍;三維可視化可以更加生動(dòng)直觀地反映監(jiān)測點(diǎn)的三維空間動(dòng)態(tài)變化狀況。
目前,在眾多的W indow s應(yīng)用程序開發(fā)工具中,微軟公司的VC++6.0已經(jīng)成為OpenGL圖形應(yīng)用的首選開發(fā)工具。要使用OpenGL圖形庫來開發(fā) 2D/3D的應(yīng)用程序,必須解決程序框架問題[2,8-9]。
由于OpenGL是獨(dú)立于硬件系統(tǒng)、窗口系統(tǒng)和操作系統(tǒng),所以在VC++6.0中調(diào)用OpenGL的函數(shù)編寫程序之前,必須加入一些設(shè)置。
1)在文件視圖中增加OpenGL視圖類的頭文件“OpenGLView.h”和應(yīng)用程序文件“OpenGLView.cpp”到工程。
2)在“StdAfx.h”頭文件中包含,〈glgl.h〉、〈gl glu.h〉、“glaux.h”頭文件。
3)設(shè)置OpenGL連接。在“工程”的“設(shè)置”中選擇“連接”選項(xiàng)卡,在“對象庫模塊”一項(xiàng)中鍵入: opengl32.lib glu32.lib glaux.lib,即建立好 M FC類與OpenGL的連接。
4)將新建工程視圖類的基類改為OpenGL視圖類,實(shí)現(xiàn)以O(shè)penGL為應(yīng)用程序接口,對其視圖類中的函數(shù)進(jìn)行覆蓋,繪制自己所需要的圖像。
5)在新建工程的視圖類中調(diào)用OpenGLView中的繪圖函數(shù)OnDraw,覆蓋CView中的同名函數(shù)。
6)重載OpenGL視圖類中的虛函數(shù):初始化窗口函數(shù)、窗口重繪函數(shù)、圖形渲染函數(shù)和銷毀窗口函數(shù)。
這樣,一個(gè)OpenGL應(yīng)用程序框架就建好了,只需要在新建工程的視圖類中添加自己所需的繪圖代碼即可。
OpenGL的基本繪圖過程為先初始化繪圖窗口,接著進(jìn)行視景變換和投影變換,然后繪制所需的圖形,并且通過改變窗口大小來重新進(jìn)行視景變換,最后在程序?qū)⒁顺銮颁N毀窗口。程序?qū)崿F(xiàn)的基本流程見圖1。
圖1 可視化程序流程圖
3.1 窗口初始化
首先,將窗口背景顏色清理為黑色,然后,設(shè)置深度緩存;再設(shè)置一個(gè)定時(shí)器:SetTimer(1,50, NULL),根據(jù)需要設(shè)置窗口重繪的時(shí)間間隔。添加一個(gè)布爾變量作為程序開始的標(biāo)志,將其初始值設(shè)為TRUE,這是設(shè)置動(dòng)畫效果的關(guān)鍵。
3.2 視口設(shè)置與投影變換
要在計(jì)算機(jī)屏幕的正確位置顯示圖形,必須確定計(jì)算機(jī)屏幕坐標(biāo)系與實(shí)體坐標(biāo)系的關(guān)系,將所要繪制的物體,經(jīng)過幾何變換,放置到屏幕正確的位置。這個(gè)過程就需要進(jìn)行視口設(shè)置與投影變換。
1)用glViewport(x,y,w,h)定義一個(gè)視口,函數(shù)參數(shù)(x,y)是視口在屏幕窗口坐標(biāo)系中的左下角點(diǎn)坐標(biāo),參數(shù)w和h分別為視口的寬度和高度。
2)調(diào)用 glM atrixMode(GL_PROJECTION),說明當(dāng)前矩陣方式是投影。
3)調(diào)用矩陣初始化函數(shù)glLoad Identity(),重置投影矩陣。
4)設(shè)置視口的大小。調(diào)用glOrtho(left,right, bottom,top,near,far)函數(shù),創(chuàng)建一個(gè)平行視景體,即創(chuàng)建一個(gè)正射投影矩陣。其中近剪裁平面是一個(gè)矩形,其左下角的三維坐標(biāo)是(left,bottom, -near),右上角的坐標(biāo)是(right,top,-near);同理,遠(yuǎn)剪裁面其左下角空間坐標(biāo)為(left,bottom, -far),右上角空間坐標(biāo)(right,top,-far),如果沒有其他變換,正射投影的方向平行于 Z軸,且視點(diǎn)朝向Z負(fù)軸。
5)選擇模型觀察矩陣 glM atrixMode(GL_ MODELV IEW),然后再重置模型觀察矩陣,調(diào)用glLoad Identity()。
3.3 繪制圖形
在工程實(shí)現(xiàn)監(jiān)測點(diǎn)的一維、二維、三維動(dòng)態(tài)可視化,需設(shè)置消息處理函數(shù),按下不同的鍵,執(zhí)行不同的顯示模式。按下鍵盤數(shù)字“1”、“2”、“3”分別顯示一維、二維、三維位移變化圖。按下“1”時(shí)執(zhí)行函數(shù)Mode1D(),按下“2”時(shí)執(zhí)行函數(shù)Mode2D(),按下“3”時(shí)執(zhí)行函數(shù)Mode3D()。所以要在所建工程的源程序文件中添加新的成員函數(shù)Mode1D、Mode2D和Mode3D,規(guī)定各自的畫法。另外,在窗口中新建一個(gè)子對話欄顯示當(dāng)前監(jiān)測點(diǎn)的時(shí)間和坐標(biāo)信息。
3.3.1 一維可視化程序編制與實(shí)現(xiàn)
在成員函數(shù)Mode1D()中添加代碼。在一個(gè)窗口中同時(shí)顯示 X、Y、Z坐標(biāo)的位移時(shí)程變化圖,具體算法如下。
1)清除屏幕和深度緩存。glClear(GL_COLOR_BUFFER_B IT|GL_DEPTH_BUFFER_B IT );
2)畫背景。用glBegin(GL_QUADS)繪制三組獨(dú)立的填充四邊形作為背景,用glVertex2f()繪制單精度浮點(diǎn)型的二維平面頂點(diǎn),這些頂點(diǎn)為即將繪制的四邊形的坐標(biāo),用glEnd()收尾。接著在屏幕上畫坐標(biāo)軸。
3)讀數(shù)據(jù),畫位移時(shí)程圖。①畫流動(dòng)虛線,使點(diǎn)的位移時(shí)程圖看上去更加生動(dòng);②統(tǒng)計(jì) X、Y、Z坐標(biāo)的最大最小值和平均值,為后面平移畫點(diǎn)做好準(zhǔn)備;③進(jìn)行OpenGL幾何變換;④開始讀文件,分別在對應(yīng)的背景上以點(diǎn)的方式(GL_PO IN TS)畫讀到的第一個(gè)點(diǎn)分坐標(biāo);⑤讀取數(shù)據(jù)的過程中,用某種顏色分別以點(diǎn)的方式畫當(dāng)前的 X、Y、Z坐標(biāo)點(diǎn);⑥畫位移時(shí)程線。用畫獨(dú)立線的方式(GL_L INES)連接當(dāng)前點(diǎn)與前一個(gè)點(diǎn),并且使用與當(dāng)前點(diǎn)不同的顏色。每畫一個(gè)點(diǎn)做一次平移變換,使所繪的當(dāng)前點(diǎn)能一直在屏幕上顯示。
4)實(shí)例效果。以蘇通大橋某監(jiān)測點(diǎn)2007-03-17T12:20~13:30的監(jiān)測數(shù)據(jù)(二維和三維實(shí)例所用數(shù)據(jù)也為此數(shù)據(jù))為例,得到的位移時(shí)程圖如圖2所示。
圖2 某監(jiān)測點(diǎn)的一維可視化效果圖
圖2中從上到下的三個(gè)橫軸分別代表 x、y、z的平均位置,淺色的豎軸為波動(dòng)幅度的參考線。右側(cè)顯示了當(dāng)前點(diǎn)即最右端的點(diǎn)的日期、時(shí)間和坐標(biāo)。深色的豎線為流動(dòng)線,以便動(dòng)態(tài)效果更加明顯。
3.3.2 二維可視化程序編制與實(shí)現(xiàn)
在成員函數(shù)Mode2D()中添加代碼。顯示監(jiān)測點(diǎn)的瞬時(shí)平面位置,同時(shí)還要用不同顏色繪制平面位置變化的軌跡,具體算法:
1)清除屏幕和深度緩存。
2)畫背景:首先畫一個(gè)四邊形作為背景平面,再畫坐標(biāo)軸。
3)設(shè)置點(diǎn)的屬性特征:先設(shè)置要繪制點(diǎn)的大小,再對點(diǎn)進(jìn)行反走樣平滑處理。
4)讀數(shù)據(jù),畫點(diǎn)位圖:①剛開始讀文件時(shí),畫出點(diǎn)的初始平面位置;②往后讀數(shù)據(jù)時(shí),用某種顏色畫出當(dāng)前數(shù)據(jù)之前所有點(diǎn)的軌跡;③用另外一種顏色畫當(dāng)前點(diǎn)。
5)實(shí)例效果:見圖3。
3.3.3 三維可視化程序編制與實(shí)現(xiàn)
1)畫前設(shè)置。
glShadeModel(GL_SMOO TH);//啟用陰影平滑
glEnable(GL_DEPTH_TEST);//啟用深度測試
glDep th Func(GL_LEQUAL);//所做深度測試的類型
glEnable(GL_PO IN T_SMOOTH);//啟用點(diǎn)平滑
glEnable(GL_CULL_FACE);//不畫多邊形的背面
glFrontFace(GL_CCW);//頂點(diǎn)逆時(shí)針方向定義的多邊形為前面
2)添加光照。光照是OpenGL一個(gè)非常重要的功能,為了使立方體有立體感,在繪制之前要添加光源。
3)OpenGL初始變換。因?yàn)镺penGL在繪制三維圖形時(shí),它默認(rèn)的是圖4所示的坐標(biāo)軸向。而一般用的空間坐標(biāo)系的軸向如圖5所示。所以要進(jìn)行初始的旋轉(zhuǎn)變換,變換代碼如下:
圖3 二維可視化效果圖
4)開始繪圖:①繪制立方體的六個(gè)平面:畫之前先啟動(dòng)光照。多邊形模式采用 glPolygonMode( GL_BACK,GL_FILL)。表示所畫的多邊形模式為背面填充,這樣可以透過立方體的前面看到里面點(diǎn)的運(yùn)動(dòng)。②畫坐標(biāo)軸:畫之前要關(guān)閉光照和深度測試,因?yàn)樽鴺?biāo)軸是畫在立方體內(nèi)部的,如果不關(guān)閉深度測試,線將會被它前方的立方體的面遮擋而無法顯示;打開混合GL_BLEND可以使繪制的軸線與立方體更好的融合。③讀數(shù)據(jù),畫監(jiān)測點(diǎn):統(tǒng)計(jì)X、Y、Z坐標(biāo)的最大值與最小值之差及平均值。以最大值與最小值之差的絕對值來確定縮放比例;統(tǒng)計(jì)平均值目的是平移坐標(biāo),使繪制點(diǎn)的平均位置在立方體中心。然后每讀取一個(gè)數(shù)據(jù),就畫一個(gè)點(diǎn),則在窗口中就可以動(dòng)態(tài)顯示其位置。
5)添加消息處理函數(shù)。其實(shí)現(xiàn)功能是:鼠標(biāo)能夠拖動(dòng)立方體,進(jìn)行旋轉(zhuǎn),觀察移動(dòng)點(diǎn)在不同方向上的位移。
3.4 銷毀窗口
程序退出前,調(diào)用函數(shù)DestroyScene(),銷毀窗口,關(guān)掉計(jì)數(shù)器。
本文以VC++6.0為開發(fā)工具、OpenGL為圖形接口,利用OpenGL提供的幾何建模、光照等特性,結(jié)合GPS實(shí)時(shí)監(jiān)測系統(tǒng)的數(shù)據(jù),初步實(shí)現(xiàn)了監(jiān)測點(diǎn)的一維、二維和三維時(shí)程數(shù)據(jù)的動(dòng)態(tài)可視化顯示。通過對GPS高采樣率監(jiān)測數(shù)據(jù)的可視化,可以直觀地察視監(jiān)測點(diǎn)位置的動(dòng)態(tài)變化狀態(tài),并分析其動(dòng)態(tài)特征。這比以往僅依靠事后的圖表來分析顯得更為及時(shí)、直觀清楚,有助于實(shí)現(xiàn)對被監(jiān)測對象的實(shí)時(shí)監(jiān)控。三維可視化技術(shù)在現(xiàn)代大型建筑工程的幾何監(jiān)測系統(tǒng)中具有廣闊的應(yīng)用前景。
[1]丁愛玲.計(jì)算機(jī)圖形學(xué)基礎(chǔ)教程[M].北京:電子工業(yè)出版社,2004.
[2]楊培軍.基于 GPS的大跨度橋梁健康監(jiān)測系統(tǒng)研究[D].成都:西南交通大學(xué),2006.
[3]王同洲,郭淑娟,廖 平.1000m海試水面船運(yùn)動(dòng)監(jiān)測可視化仿真[J].計(jì)算機(jī)仿真,2004,261(5):177-179.
[4]廖 平,劉少軍.基于OpenGL的深海采礦系統(tǒng)監(jiān)測可視化[J].礦山機(jī)械,2004,6(8):6-8.
[5]毛朝陽.衛(wèi)星監(jiān)測中三維可視化圖形技術(shù)應(yīng)用[J].計(jì)算機(jī)應(yīng)用,1999(8):18-20.
[6]陸新征,江見鯨.計(jì)算機(jī)圖形仿真技術(shù)在結(jié)構(gòu)動(dòng)力分析中的應(yīng)用[C].中國計(jì)算力學(xué)大會論文集.2001.
[7]黃聲享,楊保岑,張 鴻,等.蘇通大橋施工期幾何監(jiān)測系統(tǒng)的建立與應(yīng)用研究[J].測繪學(xué)報(bào),2009,38(1):66-72.
[8]Dave Shreiner,Mason Woo,Jackie Neider.OpenGL編程指南[M].北京:人民郵電出版社,2005.
[9]吳 斌,段海波,薛鳳武.OpenGL編程權(quán)威指南[M].北京:中國電力出版社,2001.
The 3D visualization and initial implementation of GPSgeometry monitoring system
HUANG Sheng-xiang,SHEN Feng-jiao,ZHANG Cui-feng
(School of Geodesy and Geomatics,Wuhan University,Wuhan 430079,China)
Modern GPS geometry monitoring system has high hits as well as p lentiful monitoring stations, so the visualization of data management and its utilization can make the data information getting from the system mo re vivid and direct.In this paper,stress is laid on the initial imp lementation of the outputs of three-dimensionalmonito ring data,through the research of how to make use of VC++6.0 as the development tool,OpenGL as the graphic interface by w hich the geometry modeling,lighting are p rovided,and finally the monito ring data from GPSmonito ring system of Sutong Bridge.
GPS;geometry monitoring;visualization;OpenGL
TP391.9
A
1006-7949(2010)01-0001-04
2009-04-05
國家科技支撐計(jì)劃項(xiàng)目(2006BAG04B03)
黃聲享(1964-),男,教授,博士.
[責(zé)任編輯:李銘娜]