当前位置:文档之家› 三维地矿模型可视化控件研究

三维地矿模型可视化控件研究

收稿日期:2011-10-25;修回日期:2012-01-29基金项目:国家自然科学基金项目(70971059)作者简介:王彦彬(1977-),男,河北保定人,博士研究生,研究方向为网络数字矿山系统。

三维地矿模型可视化控件研究王彦彬,车德福,郭甲腾,张维国(东北大学资源与土木工程学院,辽宁沈阳110004)摘要:三维建模与可视化是网络数字矿山系统的一个重要组成部分,在网络环境下实现地矿模型的三维可视化,需要在客户端对原始数据或者模型数据进行三维再现。

为了便于与前期工作相结合,同时为了提高系统的运行效率,文中在分析ActiveX 控件的基础上,采用ActiveX 控件结合OpenGL 图形库的方法实现地矿模型在网络环境下的显示与交互。

结果表明,使用控件将业务逻辑进行封装实现三维地矿模型可视化,有利于软件复用,提高软件开发效率,并能有效解决客户端与服务端负载平衡问题。

关键词:数字矿山;控件;ActiveX ;OpenGL ;地矿模型中图分类号:TP31文献标识码:A文章编号:1673-629X (2012)06-0061-03Research on Visual Control of 3D Geological ModelWANG Yan -bin ,CHE De -fu ,GUO Jia -teng ,ZHANG Wei -guo(School of Resources &Civil Engineering ,Northeastern University ,Shenyang 110004,China )Abstract :3D modeling and visualization is important parts of web digital mine system.It needs to reconstruct the raw or model data to re-alize 3D visualization of geological model.In order to combine with the early works and to improve the working efficiency ,analyzed the realization of ActiveX controls ,realized the visualization and interaction under the internet environment by ActiveX and Open GL.The re-sults showed that using controls could benefit to software reusing ,help to improve programming efficiency and could efficiently solve the load balance between client and server.Key words :data mine ;controls ;ActiveX ;OpenGL ;geological model0引言随着计算模式和网络的发展,B /S 模式得到广泛应用[1],数字矿山系统的建设也逐渐与网络结合。

数字矿山系统建设中,三维地矿模型的建模与可视化是一个重要的组成部分,通过三维地矿模型工作人员可以直观地观察地质体内部结构和特征,同时也利于对模型进行空间分析,帮助地学工作者在动态场景中分析、推理,深入了解相关的变化特征以及规律。

网络数字矿山系统建设的重点之一就是在网络环境下再现三维地矿模型,当前网络三维可视化技术主要有VRML (X3D )、Java3D (JOGL )以及采用控件结合DirectX3D 或者OpenGL 的方法进行实现[2]。

其中VRML (X3D )的运行需要相关插件的支持,虽然开发过程比较容易,比如现在的3D MAX 等建模软件均提供了对它的支持,可以直接将建模结果输出为VRML (X3D )文件,但是它很难与数据库结合,同时它的运行效率也待进一步提高;Java3D (JOGL )是在Java 环境下进行三维模型开发的主要技术手段,本身具有很多的优点,比如便于和数据库连接,具有跨平台性等,但是它也有一些缺点,如执行速度的问题、显示效果的问题等;采用控件结合DirectX3D 或者OpenGL 的方法可以提高渲染速度,并且可以方便地与前期开发的C ++成果进行结合,目前也有很多的软件和相关工作采用控件的方法进行实现,因此在网络数字矿山系统建设中可以采用控件结合OpenGL 的方式实现客户端模型的可视化。

1ActiveX 控件ActiveX 技术是微软公司提供的一种基于COM 的综合技术,它与Windows 系列操作系统紧密结合,在很多领域得到广泛应用[3 6]。

ActiveX 控件是ActiveX 技术的重要组成部分,一个ActiveX 控件基本上是一个支持IUnknown 接口的OLE Object [7],需要在ActiveX容器中才能运行,容器通过控件中定义的方法、属性、事件等与控件进行通信。

ActiveX 控件具有如下的优点:容量小能通过IE第22卷第6期2012年6月计算机技术与发展COMPUTER TECHNOLOGY AND DEVELOPMENTVol.22No.6June 2012自动下载,便于在网络上进行传输;与开发语言无关,能够使用VC++.NET、VB等开发工具进行开发,这样,不同开发者可以用不同的开发工具进行开发,最后把开发出来的组件进行组合实现具有一定功能的系统;ActiveX控件是一种可以重用的组件,这样就能够减轻开发者的负担,降低软件开发成本。

由于ActiveX存在以上的优点,一些GIS厂商相继推出了ActiveX控件,例如:国外有MapInfo公司的MapX、ESRI公司的MapObjects、Intergraph公司的Geo-Media;国内有中科院超图公司的SuperMap等[8]。

2OpenGLOpenGL是一个开放的,与硬件、系统无关的高效、稳定的图形开发库,它提供了120多个函数,开发者可以用这些函数在Windows、Linux平台下开发可交互的三维图形程序,在很多领域有广泛的应用[9 11]。

OpenGL渲染流程如图1所示[12]:图1OpenGL渲染流程3模型可视化三角面片是基本的构模单元,无论采用GTP构模还是采用多层DEM等方式构模,其最终模型均可以用三角面片来表示。

文中客户端主要对三角面片进行渲染,将构模过程和显示过程相分离,从而简化客户端程序的编写,其所对应的主要数据结构如下:class CTinNode{public:CTinNode();CTinNode();long m_nNodeID;//点标识int m_nNodeType;//结点类型double x,y,z;//三维坐标……CTinNode*prev;CTinNode*next;CTinNode*up;CTinNode*down;};class CTinEdge{public:CTinEdge();CTinEdge();int m_nEdgeID;//边标识……CTinPolygon*m_pNeighbourTinTri[2];//Tin网相邻左右三角形CTinEdge*prev,*next;};class CTinPolygon{public:CTinPolygon();CTinPolygon();int m_nPolygonID;//多边形标识……CTinNode*m_pConsistNodes[3];//所包含的顶点CTinEdge*m_pConsistEdges[3];//所包含的边CTinPolygon*prev,*next;};三角面片的绘制由OpenGL命令glBegin(GL_TRI-ANGLES)来完成。

4ActiveX控件的实现文中采用Visual Studio.NET进行控件的开发,其中涉及的主要步骤如下:1)新建ActiveX控件项目,配置OpenGL编程环境,包括设置正确的像素格式,建立Rendering Context (RC)与Device Context(DC)之间的关联。

像素格式是对使用OpenGL进行的一些基本的设置,包括版本号、是否支持在窗口中绘图、缓存模式、颜色模式等。

建立RC与DC的关联是为了使绘制的图形能够在窗口进行显示。

相关源码如下:BOOL SetupPixelFormat(HDC hdc){static PIXELFORMATDESCRIPTOR pfd={sizeof(PIXELFORMATDESCRIPTOR),//pdf结构的大小1,//版本号PFD_DRAW_TO_WINDOW|//支持在窗口中绘图PFD_SUPPORT_OPENGL|//支持OpenGLPFD_DOUBLEBUFFER,//双缓存模式PFD_TYPE_RGBA,//颜色模式24,//颜色深度……·26·计算机技术与发展第22卷};int pixelformat;if((pixelformat=ChoosePixelFormat(hdc,&pfd))== 0){ATLASSERT(FALSE);return FALSE;}if(SetPixelFormat(hdc,pixelformat,&pfd)==FALSE){ATLASSERT(FALSE);return FALSE;}return TRUE;}void CreateContext(HDC hdc,RECT&rc){PIXELFORMATDESCRIPTOR pfd;if(!SetupPixelFormat(hdc))return;int n=GetPixelFormat(hdc);DescribePixelFormat(hdc,n,sizeof(pfd),&pfd);m_hRC=wglCreateContext(hdc);wglMakeCurrent(hdc,m_hRC);int width=rc.right-rc.left;int height=rc.bottom-rc.top;glViewport(0,0,width,height);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-width/2,width/2,-height/2,height/ 2);glMatrixMode(GL_MODELVIEW);}2)建立接口,添加消息响应函数,编写逻辑代码,实现地矿模型的三维显示。

相关主题