基于数字地图的三维图形控件开发技术
2010-04-19孙建波
孙建波
(西安测绘总站,陕西西安 710054)
基于数字地图的三维图形控件开发技术
孙建波∗
(西安测绘总站,陕西西安 710054)
讨论了开发GIS控件的意义以及使用MFC和OpenGL开发基于数字地图的三维图形控件的开发技术。介绍了DLG、DEM数据的存储基本形式,使用等高线、DEM显示三维矢量图形和立体地形的方法,并给出了开发三维控件的实例。
DEM;数字地图;控件
1 引 言
传统的GIS系统,系统结构相对封闭、庞大,价格昂贵,不易与其他信息系统相结合。由于组件技术的出现,软件产业的形式也随之发生了很大的变化。大量组件生产商涌现出来,并推出各具特色的组件产品;软件集成商则利用适当的组件,将这些组件集成,快速生产出用户需要的应用系统。GIS的开发也同其他软件产品一样,逐渐步入了利用组件技术进行开发的行列中。开发小巧灵活、功能独特的GIS控件是目前GIS开发方法之一。本文在开发工作的实例中,给出了如何使用数字地图数据开发三维图形控件的方法。
2 MFC构建控件程序框架
2.1 MFC ActiveX ControlWizard构造控件和程序框架
ActiveX是Microsoft提出的一组使用COM(Component Object Model,部件对象模型)使得软件部件在网络环境中进行交互的技术集,它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。ActiveX是一个模块化的对象,应用程序要增加它的功能,只要灵活地插入具有此项功能的ActiveX控件即可实现。ActiveX的优势还在于它的动态可交互性,用户可以动态地在使用过程中,通过改变它的属性和参数,在应用程序中实现自己的要求。本文着重介绍以Visual C++6.0为工具,利用系统提供的AppWizard和MFC构造使用DEM显示三维立体地形的ActiveX控件。
在Microsoft Developer Studio环境下,按如下的操作步骤可以快速生成一个标准的ActiveX控件。首先,启动系统的AppWizard,用File菜单下的New菜单项创建新的项目。选择的是列表框中的MFC ActiveX ControlWizard项。用 MFC ActiveX ControlWizard项则产生以COleControl为基类的控件对象类,它继承了所有COleControl类中实现的OLE控件的特性,包括窗口对象特性和方法、属性及事件等。接着,按照系统给出的提示信息逐步完成创建工作。用户可根据实际应用的要求定制控件的各项特性。上述步骤创建的项目名为View3D,创建工作完成后,打开Workspace文件View3D.dsw,可以看到系统生成的View3D控件框架。编译此项目,生成 View3D. ocx。在当前的Developer Studio环境下,这个控件已经被自动注册了。
2.2 控件的测试
用Microsoft Developer Studio开发环境提供的工具ActiveX Control Test Container可以立即进行测试,在已提供的可插入OLE控件列表中,View3D就是我们生成的控件名。如果想在Visual Basic、Visual Foxpro等其他开发环境中使用它,则必须先对View3D. ocx文件进行注册,具体做法是在Windows操作系统的命令行方式下键入命令:“regsvr32…\View3D. ocx”。此后,我们就可在任何支持ActiveX控件的环境中使用它了。注意:.ocx文件应该随时更新和注册。当然,这样生成的控件没有什么实质性的用处,若在任何一个包容器中测试它,则只可见一个矩形框和一个内切椭圆,除了缩放和位置移动功能外不能进行任何操作。接下来,我们利用这个基本框架开发更复杂的三维图形控件了。
3 控件下OpenGL程序的实现步骤
3.1 加入库文件
要实现OpenGL编程,首先要在编程环境中包括两个函数库:opengl32.lib和glu32.lib。
3.2 图形操作描述
用GDI函数绘制窗口时使用了CDC成员函数,程序首先必须处理设备描述表DC(Device Contexts),DC包含了如何在窗口上显示图形的诸多信息。除DC外,OpenGL还必须处理专用的绘图描述表RC(Rendering Contexts)。RC中包含有OpenGL与窗口系统相关的各种消息。一个OpenGL应用程序必须创建一个绘图描述表后再启动它,最后在所定义的窗口内按常规方式调用OpenGL函数绘制图形。绘图描述表RC是用 OpenGL函数 wglCreateContext建立的。程序在OnCreate方法中创建了一个绘图描述表RC,在程序的整个生存期都在使用它,它是在CView3DCtrl::OnDestroy()函数中的wglDeleteContext撤销的。另外在使用OpenGL有一个限制,它只能用于具有WS_CLIPSIBLINGS和WS_CLIPCHILDREN风格的窗口,如果窗口不具有这些风格,OpenGL将不会绘制任何东西。
3.3 像素格式
在创建一个绘图描述表之前,首先必须设置像素格式。像素格式确定了从OpenGL图形到显示窗口所支持的格式。第一步要用描述着色类型的值填充PIXELFORMATDESCRIPTOR结构,该结构和目标窗口的设备描述表一起传递给ChoosePixelFormat函数,传递给该函数的信息用来确定像素格式,实现所需格式和系统所能够给予格式的最佳匹配。
4 数字地图的三维显示
4.1 DLG数据及显示
在这里以等高线为例子,说明DLG数据的特点以及显示。等高线数据包括的等高线的属性数据和坐标串,其中属性数据又包括了等高线的类型、高程等内容。坐标串和高程构成的三维空间的线,Open-GL提供了显示线的功能,显示的结果如图1等高线图所示。
等高线数据只能显示如图1所示的图形,要显示接近真实地形的图形,就要将数据进行转换,本实例采用的方法是用离散点构成Delauney三角网,形成易于由OpenGL显示的顶点-边-面结构的数据,如图2三角网显示图所示。
图1 等高线图
图2 三角网显示图
4.2 DEM数据格式及转换
将高程或海拔分布作为地面特性的描述称为数字高程模型(DEM),数字高程模型是区域地形的数字表示,由一系列地面点的X、Y位置坐标及其相应的高程Z值组成。其中规则格网地形模型以矩形网格作为构成地形模型的基本元素,在地形上按照网格规则等间隔的采集地形高程值,并把各点的高程值顺序地存储在文件中。国际上有许多通用的数字高程模型(DEM)标准:SDTS,USGS Standard,DTED,GeoTIFF等,本控件使用的是地面高程数据文件(高斯-克吕格坐标网)。地面高程数据文件由一个首记录和多个中间记录组成,文件首记录包含地面高程数据文件的名字和断面数,中间记录包含断面号、断面点数、最大高程、最小高程以及断面上的高程值等。根据地面高程数据文件的数据格式读取数据,将其转换为易于OpenGL显示的三角形顶点数据。转换的一种简单方法是将每一个矩形网格分成两个三角形,这样就将网格数据转换为三维的三角形网格。
4.3 三维地形的显示
使用显示列表是加速显示的方法之一。一个显示列表编译了一系列标准的OpenGL调用,可通过使用显示列表的标识号调用。利用显示列表显示离散点构成的三角面片,设置光照等属性创建绘制场景,可得到三维地形的可视化结果。综合地形的显示和控件开发技术编制实现了地形显示控件示例程序View3D。VC++提供了测试 ActiveX控件的工具 ActiveX Control Test Container,可以测试控件View3D的属性、方法和事件。使用 ActiveX Control Test Container中测试View3D的显示效果如图3控件测试图所示。
图3 控件测试图
5 控件的使用
以 Visual Basic为例,简要说明使用已开发的View3D.ocx控件。在Visual Basic应用程序中使用的ActiveX控件,以前称为自定义控件或OLE控件,用法与使用标准控件一样。Visual Basic的ActiveX控件是32位控件。一些第三方开发商提供的ActiveX控件是16位控件,这样的控件不能再在Visual Basic中使用。将ActiveX控件和其他可加入的对象加到工具框中,即可在工程中使用它们。要在工程的工具框中加入控件,请按照以下步骤执行:
(1)在“工程”菜单中,单击“部件”以显示“部件”对话框。也可以在工具框中单击鼠标右键以显示该对话框。该对话框中将列出所有已经注册的可加入的对象、设计者和ActiveX控件。
(2)要在工具框中加入ActiveX控件,请选定控件名称左边的复选框。
(3)单击“确定”以关闭“部件”对话框。所有选定的ActiveX控件将出现在工具框中。完成了以上步骤,在以后的应用系统开发中,就可以使用这个View3D控件来显示三维的等高线和地形了。
6 结 语
本文简要介绍了三维图形控件的开发技术以及在Visual Basic下的使用,在此图形控件的基础上可以增加其他功能,并在其他支持 ActiveX的容器下使用。随着ActiveX技术和GIS功能组件的集成开发技术的发展,ActiveX的开发在GIS开发中的作用会越来越重要,是GIS开发的一个重要部分和发展的方向,值得进一步深入地研究。
参考资料
[1]王家耀,邹建华.地图制图数据处理模型方法[M].北京:解放军出版社,1991
[2]邹逸江.空间数据立方体的研究[D].武汉大学博士论文,2002
The Technology of 3D Graphics ActiveX Control Based on Digital Map
Sun JianBo
(Xi′an Survey Department,Xi′an 710054,China)
This paper dissussed the meaning of GIS ActiveX controls and the methods of using MFC and OpenGL to develop 3D graph ActiveX control based on digital map,also introduced the basic storing structure of DLG、DEM and the methods of showing contour lines、DEM and presented the sample of 3D graph ActiveX control.
DEM;digital map;control
1672-8262(2010)05-51-03
P208
B
2009—10—30
孙建波(1969—),男,工程师,主要从事制图与地理信息系统的开发。