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