基于OpenGL的可视化技术在钻井中的应用
桑 卓1,胡祥云1,范 萍1,牛一雄2,潘和平1,2
(1.中国地质大学地球物理与空间信息学院,湖北武汉430074;
2.中国科学钻探工程中心,北京100035)
摘 要:在介绍了基于OpenGL的三维可视化技术基本原理和流程的基础上,着重研究了其在钻井工程中的应用。并以中国科学钻探为例,在三维可视化环境中形象直观地展示钻井数据之间的相互关系,在钻前设计、钻进监测及钻后分析中,有效提高地质学家分析复杂数据和提取有效信息的能力,从而提高了钻井效率。关键词:OpenGL;三维可视化;钻井;中国科学钻探
中图分类号:TP391 文献标识码:A 文章编号:1005-3751(2005)04-0090-03
ApplicationofThree-DimensionalVisualizationof
DrillingEngineeringBasedonOpenGL
SANGZhuo1,HUXiang-yun1,FANPing1,NIUY-ixiong2,PANHe-ping1,2
(1.InstituteofGeophysicsandGeomatics,ChinaUniversityofGeosciences,Wuhan430074,China;
2.TheEngineeringCenterofCCSD,Beijing100035,China)
Abstract:Inthispaper,thebasicprincipleandflowchartofthree-dimensionalvisualizationbasedonOpenGLarebrieflypresentedanditsapplicationtodrillingengineeringisemphasized.TheinterrelationsamongthedrilleddataofChineseContinentalScientificDrilling(CCSD)maybevisuallyshowedupinathree-dimensionalvisualizationenvironment.Onthebasisofthis,theabilitiesofthedrillingper-sonnelinanalyzingcomplicateddataintheprocessesofpre-drillingdesign,drillingmonitoring,drillinganalysis,etc.Thusacceleratetheirexchangeandco-operationwiththedisciplinesrelatedandraisethedrillingbenefits.Keywords:OpenGL;three-dimensionalvisualization;drillingengineering;CCSD
0 引 言
科学计算可视化与计算机图形学技术在科学研究、工
业控制中的应用取得了长足的进步,已经深入到研究地球科学的许多实际问题中。在油气勘探开发过程中,地质学家和地球物理学家们应用具有三维可视化功能的软件工具,能够建立更直观、更精确的地质模型,使我们对地层的了解更加深刻[1,2]。将三维可视化技术应用到钻井行业,形象直观地将钻井工程中涉及的各种时间和现象同与之相关的地质、力学环境紧密结合,已逐渐成为钻井技术领域的一个研究方向和解决钻井问题的有效手段。国外有些大的石油公司和地球物理公司(如Landmark和Geo-Quest等)都在构建这样的可视化技术和产品框架。An-derson[3,4]等人应用Fortran程序实现了井眼轨迹的三维显示,但是他的表现方式比较单调,且不能实现局部图像放大的功能。而且国外的井眼可视化模块价格昂贵,对国
收稿日期:2004-10-14
基金项目:国家/九五0重大科学工程中国科学钻探项目资助作者简介:桑 卓(1981)),男,吉林敦化人,硕士研究生,主要研究方向为三维可视化研究。内引进者来说,只有使用权,而无自主版权。文中基于三维开放图形库OpenGL,对中国科学钻探三维可视化系统进行研究与实现,在优化井眼轨道设计、实时数据分析与决策、有效预防和处理井下复杂和事故等方面取得了良好的效果。
1 OpenGL概述
OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准[5,6]。目前,包括Microsoft,SGI,IBM,DEC,SUN,HP等大公司都采用了OpenGL作为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品,其中比较著名的产品包括动画制作软件SoftImage和3DStudioMAX、仿真软件OpenInventor、VR软件WorldToolKit、CAM软件ProEngineer、GIS软ARC/INFO等等[7,8]。
值得一提的是,随着Microsoft公司在WindowsNT及其以后产品中提供了OpenGL标准及OpenGL三维图形第4期 桑 卓等:基于OpenGL的可视化技术在钻井中的应用#91#
加速卡的推出,OpenGL将在微机中有广泛的应用,同时也为广大用户提供了在微机上使用以前只能在高性能图形工作站上运行的各种软件的机会[9]。
OpenGL实际上是一个开放的三维图形软件包,它于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与.NET紧密接口,便于实现有关计算和图形算法,可保证算法的正确性和可靠性。
2.2 基于OpenGL的钻井三维可视化
利用OpenGL显示图形,首先需要构造几何体要素(点、线、多边形、图像、位图),创建对象的数学描述,然后在三维空间上放置对象,选择有利的观察点。接着计算对象的颜色,这些颜色可直接定义,或由光照条件及纹理间接给出,最后进行光栅化,把对象的数学描述和颜色、信息转换到屏幕的像素。2.2.1 设置基本参数
在用OpenGL绘制三维地形模型和进行纹理映射前,需要设置相关的景观参数值。这些参数包括光源性质(镜射光、漫射光和环境光)、光源方位(距离和方向)、颜色模式(索引模式或RGBA模式)、明暗处理方式(平滑处理或平面处理)、纹理映射方式等[13~15]。除此之外还需设定视点位置和视线方向。
以上参数设置可以由下列程序给出:
glShadeModel(GL-SMOOTH); //启用阴影平滑glClearColor(0.0f,0.0f,0.0f,0.5f); //背景颜色glClearDepth(1.0f); //设置深度缓存
glEnable(GL-DEPTH-TEST); //启用深度测试glDepthFunc(GL-LEQUAL); //所作深度测试类型glHint(GL-PERSPECTIVE-CORRECTION-HINT,NICEST); //进行透视修正
GLfloatambientProperties[]={0.0f,0.0f,1.0f,1.0f}; //设置光照材质属性
GLfloatdiffuseProperties[]={1.0f,0.0f,0.0f,1.0f};GLfloatspecularProperties[]={0.0f,0.8f,0.2f,1.0f};GLfloatlight-position[]={0.0,0.0,0.0,0.0}; //光源位置glLightfv(GL-LIGHT1,GL-AMBIENT,LightAmbient); //设置环境光
glLightfv(GL-LIGHT1,GL-DIFFUSE,LightDiffuse); //设置漫射光
glLightfv(GL-LIGHT1,GL-POSITION,LightPosition); //光源位置
gluLookAt(x1,y1,z1,x2,y2,z2,0,1,0); //视点位置glEnable(GL-LIGHT0); //启用光源glEnable(GL-LIGHTING);
glViewport(0,0,size.cx,size.cy); //视区变换glMatrixMode(GL-PROJECTION); //修改投影矩阵glLoadIdentity(); //清除矩阵
gluPerspective(45.0f,(GLfloat)size.cx/(GLfloat)size.cy,0.1f,100.0f); //取景变换
glMatrixMode(GL-MODELVIEW); //修改取景矩阵glLoadIdentity() //清除矩阵glDrawBuffer(GL-BACK);
glDepthFunc(GL-LESS); //着色消隐glEnable(GL-DEPTH-TEST);
GL-[11,12]
2 设计与实现
2.1 数据结构
由于在钻井轨迹的三维显示中,存在测井数据量过大、系统的运行速度缓慢的问题,因此文中采用线性表的链式存储结构。在链式存储中,每个存储节点不仅包含所存元素本身的信息(数据域),而且包含有元素之间逻辑关系的信息,即前驱节点包含有后继节点的地址信息(指针域),这样可以通过前驱结点的指针域方便地找到后继结点的位置,提高数据查找速度[10]。文中采用中国科学钻探5700声成像测井曲线中在1~5000米范围内的250条测井曲线数据、井斜方位、倾角的井眼轨迹数据和电成像井径数据等测井资料作为原始数据。根据实际数据特点,采用单链表的方法,即在每个节点中除包含有数据域外,只设一个指针域,用以指向其后继结点。对原始数据在不影响实际观察的前提下进行预处理,对不必要的数据进行了压缩,提高了内存的利用率,大大降低了系统的反映时间。
用有序链表存储深度数据,结构如图1所示。
图1 有序链表存储深度数据
如图2所示,汇总表采用邻接链表存储,每一行代表每一条测井曲线的数据情况,共有250条测井曲线,每一个点中存储有该点的空间点位坐标、倾角、倾向、物性等测井系统参数。因此,在遍历整个钻井数据汇总表的同时,可从中获取相应的测井信息,从而解决了数据庞大、转化复杂、效率低下的矛盾。
2.2.2 模型实现及动态操作
可通过如下程序得到钻井的三维表面图:
图2 邻接链表存储钻井数据glBegin(GL-QUADS); //绘图 92 # 微机发展 第15卷#
glVertex3i(xij,yij,zij);
glVertex3i(x(i+1)j,y(i+1)j,z(i+1)j);glVertex3i(xi(j+1),yi(j+1),zi(j+1));
glVertex3i(x(i+1)(j+1),y(i+1)(j+1),z(i+1)(j+1));glEnd();
为了可以直观、形象地从任一角度钻井模型图,实现动态平移、旋转和缩放,以便用户可以更简便直观地从三维模型图获取实际钻井形态信息,可利用如下程序:
glRotate(TYPEangle,TYPEx,TYPEy,TYPEz); //平移glTranslate(TYPEx,TYPEy,TYPEz); //旋转glScale(TYPEx,TYPEy,TYPEz); //缩放
钻井三维模型沿Y轴旋转的代码如下:
voidCCug3dView::OnTimer(UINTnIDEvent){
switch(nIDEvent) //标志位 { case0:
InvalidateRect(NULL,FALSE); //刷新视图 break; case1:
m-yRotation+=1.0f; //顺时针旋转 InvalidateRect(NULL,FALSE); //刷新视图 break; case2:
m-yRotation-=1.0f; //逆时针旋转 InvalidateRect(NULL,FALSE); //刷新视图 break; default: {} }
CView::OnTimer(nIDEvent); }
图3 钻井模型(局部)
图4 钻井纵向切面
在图形的实时显示过程中,采用OpenGL提供的双缓冲技术,实现了图形的动态显示。
4 结 论
本系统采用.NET开发平台和基于OpenGL类库的开发思路实现了中国科学钻探三维可视化,为地质工作者提供了一个交流和协作的综合三维环境,通过对数据的实时解释和分析对比,可以及时分析实钻井眼与设计井眼之间的关系,实时了解所钻地层的特征,实现实时导向和对有关钻井事故进行预测和分析。该系统具有良好的数据库接口,可作为其他测井系统进行改进,并作为测井综合信息系统的子系统存在。
参考文献:
[1] WardRW.未来地球物理技术的发展趋势)))美国国家
石油委员会委员的观点[J].TheleadingEdge,1996,15(6):729-735.
3 实验与分析
文中工作是在Pentium41.8G处理器和512MRAM的PC机上,在Windows2000操作系统下,使用.NET集成开发环境并结合OpenGL软件实现的。
本系统可对中国科学钻探主井眼进行整体或者局部显示,如图3为钻井的局部三维显示效果,可实现钻井模型的增量及动态的平移、缩放、旋转,并对图像进行纵向或者横向的切片,如图4所示。
实验证明,本系统可直观表示出数据信息,具有交互性好、实时性快、图形操作方式灵活等优点,且兼顾了视觉上的真实性和花费上的经济性,与国内外同类文献结果比较,本系统具有一定优势。(下转第115页)
第4期 杨 萌等:DDBS安全机制及其在SQLServer中的实现
SelectName,dept,sala,tele-h,addr
Fromopenrowset(-sqloledb.,-server.;-xsyu.;-xsyu.,dbcom-pany.dbo.BaseInfo)
/*给finance组授权访问Sala-view*/GrantselectonSala-viewtofinanceGo
setansi-null-dflt-ononsetansi-warningsonselectname,dept,tele-o
fromopenrowset(-sqloledb.,-server.;-xsyu.;-xsyu.,dbcompany.dbo.BaseInfo)
#115#
接着在服务器/myserver0创建两个用户/manager0和/employee0,并将/manager0添加到/finance0组中,/employ-ee0添加到/public0组中。这样,/myserver0服务器用户/employee0只需要使用/select*fromInfo_view0,就可以正确地查找到/server0服务器上员工的基本信息。而/my-server0服务器用户/manager0使用/select*formsala-view0,就可以查找到/server0服务器上员工信息中的薪资、家庭电话等敏感数据。
存储过程是存储于数据库内部经过编译可执行的SQL语句,它可被其他应用程序调用执行,彻底隐藏了用户可用的数据和数据操作中涉及的某些保密处理。在数据库应用系统中,存储过程不仅可用来完成应用系统的逻辑处理,提高应用程序的运行性能,而且也可用于保证数据的安全性与完整性。存储过程可用来保护基表的数据。为了禁止用户直接更改基表,可通过存储过程来更改基表,然后授予用户具有执行该存储过程的权力,这就了用户对基表的不当操作,从而保证了数据的安全。上例中的用户/employee0查看员工基本信息,可用存储过程/Info-proc0实现,代码如下:
/*创建一个存储过程Info-proc,从远程server服务器的BaseInfo表中选出员工的基本信息*/
createprocInfo-procas
接下来给用户/employee0授权执行该存储过程,使用/execInfo-proc0就可以查看到员工的基本信息,屏蔽掉诸如薪资、家庭电话等敏感数据。
3 结束语
通过分析分布式数据库系统的安全隐患,提出适合分布式数据库系统的安全机制,并给出这些安全机制在SQLServer中的实现方法。将这些安全机制用于笔者参与研发的分布式数据库系统中,较好地防止了系统安全问题的产生。
参考文献:
[1] 宁 洪,郑若忠,陈怀义.分布式数据库系统的安全机制
[J].计算机工程与应用,2000(3):98-100.
[2] 陆静平,何玉林.基于SQLServer视图的数据库安全模型
的研究[J].计算机工程与应用,2002(9):188-210.[3] 郑振楣,于 戈,郭 敏.分布数数据库[M].北京:科学出
版社,1998.
[4] 贾 焰,王志英,韩伟红,等.分布式数据库技术[M].北京:
国防工业出版社,2000.
[5] 施威铭研究室.SQLServer2000中文版管理实务[M].北
京:人民邮电出版社,2001.
(上接第92页)
[2] DornGA.TheRoleofVisualizationinResourceExploration
andDevelopment[M].S.Yale,Tulsa:SocietyofExplorationGeophysicists,2002.
[3] AndersonRN.Visualizationtechnologyfortheoilandgasin-dustry:todayandtomorrow[J].AAGPBulletin,1996,80(4):777-788.
[4] 百建军,朱亚平等.OpenGL三维图形设计与制作[M].北
京:人民邮电出版社,1999.
[5] OpenGLARB.OpenGLProgrammingGuide:Version1.2
[M].Memphis,Tennessee:PrenticeHall,1999.
[6] YazhouD.Realizationofmodelsimulationlayereddisplayand
controlbaseonOpenGL[A].IEEERegion10AnnualInter-nationalConference[C].S.Yale,Tulsa:[s.n.],2002.1654-1657.
[7] SylviaDA.EvolutionofthenorthernGulfofMexicothrough
theCenozoic-a3Dvisualizationtour[A].2003AAPGAnnu-alMeeting[C].S.Yale,Tulsa:SocietyofExplorationGeo-physicists,2003.1777-1779.
[8] 费广正,卢丽丹.可视化OpenGL程序设计[M].北京:清华
大学出版社,2001.
[9] ChenM,MountfordSJ,SellenA.AStudyinInteractive3
-DRotationUsing2-DControlDevices[J].ComputerGraphics,1988,22(4):121-129.
[10]李晓东.基于链表的数据库索引技术研究与实现[J].
计算机工程与应用,2004,22(4):180-182.
[11]胡卓玮,杨国东.地形三维可视化的实现与应用[J].计算机
应用,2003,23(10):70-72.
[12]Martz,Paul.TheOpenGLshadinglanguage[J].Dr.Dobb.s
Journal,2004,29(8):80-81.
[13]GuglielmoG.Three-DimensionalVisualizationofSaltWalls
andAssociatedFaultSystems[J].AAPGBulletin,1997,81(1):46-61.
[14]NielsonGM.VisualizationinscientificandEngineeringCom-putation[J].Computer,1991,24(9):58-66.
[15]MecormikBH.VisualizationinScientificComputingComput-erGraphics[J].ACMSiggraph,1987,21(6):1-14.
因篇幅问题不能全部显示,请点此查看更多更全内容