邱国鹏,陈立龙
(三明学院 海峡动漫学院,福建 三明 365004)
现阶段,年轻人学车越来越普遍,驾驶技能俨然已经成为了一种必备技能。现阶段的驾考有三个较为凸显的特点,第一,考验场数量有限,一个市辖区内,可能只有一个考验场,因为考验场是考试场地,所以基本上学员都要到考验场练习,也因为考验场的唯一性,所以对于一些较为偏远的而言,提高了他们的学习成本,同时也势必造成考验场拥堵不堪;第二,随着驾考改革各项政策的实施,国家对交通安全监管力度的加大,考驾照将会越来越难;第三,考验场本身也处于动态的建设与发展之中。基于此,对于学员而言,场地之前的学习就显得尤为重要。
每个驾校都会针对场地考(科二)和道路考(科三)推出了一些教学资料,但基本上都是静态图片或者360度全景图,少部分也有动画、视频或者单机版的驾考模拟软件。其中平面图片具有成本低、查看方便的特点,但是不够直观,也不利于后期维护;360度全景度也是只能让学员了解到一个大概的地形,也不能与要点进行很好的结合;动画、视频或者单机版的驾考模拟软件同样不利于后期维护。为了消除这些不足,本文旨在设计和研究一个基于osgEarth框架的三维可视化系统,该系统直观高效、可高度自定义。
OpenSceneGraph(简称OSG)是一个基于OpenGL技术开发的三维场景图渲染与调度引擎,是一套基于C++平台的应用程序接口(API),它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。作为中间件为应用软件提供了各种高级渲染特性、IO,以及空间结构组织函数。
osgEarth又是基于OSG框架开发的一个专注于数字地球、具有GIS功能的OSG扩展。具有如下一些特性:实时生成地形(纹理与高程),根据纹理和高程实时生成;支持矢量图渲染,灵活绘制矢量图;支持数字城市开发;支持地形调度,地形预生成的功能;提供了丰富的工具,比如缓存、osgEarth-Manipulator等;存储空间要求较小,因为都存在服务器。
目前基于osgEarth的应用研究也层出不穷,有在军事上的应用,比如构建虚拟三维空战场景[1]和无人直升机任务规划系统[2]等,也有在工程中的应用,比如三维输水管模拟系统[3]、地形建模[4]、燕塞湖水坝风险评估[5]、3D城市场景建设[6-7]以及数字地球等[8],还有一些导航上的应用[9-10]。
根据给定(选取)的一组关键坐标点(经纬度值)所绘制出的平滑曲线(驾考路线图)。本文的方法为Bezier段之间进行拼接。其算法核心必须计算出Bezier曲线的控制点,实现的方法如下:
设在平面上已知有 n+1个数据点 Pi(xi,yi),i=1,2,…,n。 要求在相邻的每两个点 Pi与 Pi+1之间,用一条3次Bezier曲线连接。
3次Bezier由4个点确定:Pi是它的起点,Pi+1是它的终点,在起点和终点之间,另外还有两个控制点,依次记为Ai和Bi,现在需要确定这两个控制点。
把过Pi点的切线方向,取为与线段Pi-1Pi+1平行的方向,那么,控制点Ai的坐标就可以表示为:
控制点Bi的坐标就可以表示为:
其中a,b是两个可以任意给定的正数,比如说,可以取a=b=1/4,这时,控制点的坐标可以用下列公式求出:
例:设Pi-1,Pi,Pi+1,Pi+2这4点的坐标为:
按照上面给出的公式,可以求得控制点Ai的坐标为:
控制点Bi的坐标为
连接Pi与Pi+1的3次Bezier曲线的参数方程为:
对这种曲线的最初一段和最后一段,不能用上述公式计算,因为公式中要用到(x-1,y-1)和(xn+1,yn+1),这两个点其实是不存在的。使用如下处理方法:
用(x0,y0)的值作为(x-1,y-1)的值,用(xn,yn)的值作为(xn+1,yn+1)的值。也就是说,在连接P0与P1的最初一段Bezier曲线中,控制点A0的坐标为:
在连接Pn-1与Pn的最后一段Bezier曲线中,控制点Bn-1的坐标为:
图1所示为根据算法,使用一组模拟点画出的一条平滑的曲线。
图1 根据一组模拟点画出的平滑曲线
本系统基于WIN7操作系统、NVIDIA显示卡、Visual Studio 2010集成开发环境进行开发的单文档应用程序,界面采用Visual Studio 2010的Office风格。使用osgdem地形生成工具。
系统基于底层的渲染引擎开发,并集成第三方库文件。数据库包含数据传输驱动、数据解析驱动、数据存储驱动,专业空间转化库包含空间坐标转换库、空间数据校验库等,渲染库包含了底层的OpenGL渲染库、平台相关的渲染窗口系统库和跨平台支持库。系统架构见图2所示。
图2 系统体系结构
为了在驾考场地区域的实际的经纬度位置上叠加一块高精度的影像与高程,需要获取该区域的高清影像与高精度高程,并对这些地形数据进行预处理。
从ASTER GDEM下载30 m精度 (一个像素代表30 m*30 m区域)高程纹理,通过输入经纬度坐标的方式指定下载区域。通过ERDAS IMAGINE 9.2对下载的高程文件进行精度校验。即便高程不是很精确,最终可以对高程进行插值模拟。
影像纹理的清晰度比高程来得更重要一些,因为纹理的精度,直接决定了最终效果的精细程度,而且纹理不能进行插值。本文使用arceyes(阿凯日)的谷歌卫星地图下载器下载纹理,支持多级纹理下载,而且在导出拼接时,可自动将低级别的纹理填充到高级别上。
切割:本系统不需要全球高程,所以使用gdalwarp(投影转换与投影设置工具)进行切割,切割命令如下所示:
gdalwarp-rsc-t srs"+prj=latlong"-te 108 34 109 35 srtm30plus_stripped.tif 10934.tif
纹理坐标校正与转换:①如果纹理本身没有坐标系统,则需要为纹理加入坐标系统。本文使用Global Mapper v12.01进行纹理图像的地球参考坐标设定(影像校正),只需确定文件四个角点的经纬度数据。②如果纹理坐标系统是UTM平面的坐标系统,则需要转换为地心坐标系统。坐标系统的转换和插值可以使用ERDAS IMAGINE 9.2进行重新投影,本文使用立方卷积的方式进行插值。
拼接:本文使用ERDAS IMAGINE的马赛克工具进行拼接。
osgEarth通过读取earth文件来识别需要完成的各项功能,文件由一个主标签map,包含highfield高程、image纹理以及定义缓存的cache的3个常用标签及其属性进行配置。earth文件定义如图3。
图3 earth文件编写
基于osgEarth搭建的数字地球具有动态生成、负担大、调度慢等特性,解决调度慢的方法是使用缓存机制来解决问题。在服务器端或者客户端,使用osgearth_cache工具预先生成地形缓存,客户端启动时加载的速度会有显著提升。使用的命令为:osgearth_cache--seed china-simple.earth--max-level 3。
地球基础框架中的影像层级较少,影像比较模糊,使用如下步骤在地球上增补高清影像:①从Google获取纹理;②使用osgdem进行纹理校正(重投影),生成中间文件(因为从Google导出的纹理的坐标不能直接使用);③osgEarth加载中间文件;④使用composite标签进行纹理复合,因为顶层的image标签数量有限制,但是composite没有限制,再者也为了避免直接使用两个image标签会导致两张纹理中间有缝隙的问题。
使用PagedLOD来动态加载地标,在场景中需要渲染模型时,才进行加载和读取到程序中来,在不需要显示时,及时移出内存。按需读取,这样可以节省内存开销,而且初始加载时系统性能也不会受到影响。
以三明驾考考验场为例,共有3个考试场地,包括理论考试区域(科目一驾驶员理论考试和科目三的安全文明驾驶常识部分)、场地驾驶技能考试(科目二)区域、道路驾驶技能考试(科目三)区域,将从考试区域数据库(见表1)中按照区域、项目的名称分别导出成一个ive文件,并输出到对应文件夹。离得近的时候进行动态地标调度。
表1 地名表Region
shape文件是一种矢量文件,用来显示公路、边界区、建筑物外表等。本文使用ArcView GIS 3.3编辑shape文件。
首先在3ds max中将数字城市模型(考试楼,标识牌等)建好,通过3dvri for max插件导出城市模型,其导出的文件格式为ive。在数字地球中增加城市,默认会在原点,需要将物体移动到地表的对应点上(为了能够把地表覆盖住,需要将高度设置高一些),然后处理物体的朝向。
设置路径的方式是以经纬度、高度的方式设定,最后再将绝对坐标点转换成世界坐标点。
路线中关键点信息由坐标(经度x、纬度y、高度z)与速度(v)两部分组成,根据关键点信息获取到路线,最后设定跟踪。表2为考验场项目数据库表。
关键点数据库表设计见表3所示。
表2 考验场项目表Item
表3 考验场路线关键点Location
路径漫游中,物体在关键点n处的朝向,根据的n点和n-1点的连线进行计算。
根据公式(1)和(2),在Canvas中绘制路线的伪代码见如下:
Begin
输入 坐标点数组points
输入 线条样式,线条颜色,线条宽度
For i from 0 to point.length step 1
If i==0则 moveTo第0个坐标点
否则 输入points,i-1,得到控制点P
输入P.pA.x,P.pA.y,P.pB.x,P.pB.y,point[i].x,point[i].y
绘制
End
首次运行需要几分钟时间,因为需要根据影像和高程文件动态生成地形,并且会在指定路径下生成缓存文件,后续打开将会非常快。
图4为增补的高清考验场地形,增加系列控制点之后,根据算法所绘制出的模拟的考验场路线(可视化漫游路径)图见图5所示,生成的平滑的Bezier曲线,达到了我们预期的目的。
图4 增补的高清考验场地形
图5 考验场路线
本文研究与设计了一个基于osgEarth的三维可视化驾考场地展示系统,可自定义矢量信息、提供高度自定义路线曲线种类、路线动态设定与调整,根据给定的系列控制点绘制出平滑的贝塞尔曲线,用以模拟驾考路线,该系统用能够既有利于学员更加直观地熟悉考试场地,也有利于管理员对系统内容的后期维护。系统还处于初步的设计研发阶段,除了全局鸟瞰模式之外,计划下一步增加多视角、按照选择路线自动飞行漫游模式等功能。
参考文献:
[1]王雷,丁华.基于 OSGEarth 的大型三维空战场景的搭建[J].软件,2016,37(1):114-116.
[2]黄福贵,张明,张大高.基于 OSGEarth 的无人直升机任务规划系统开发[J].直升机技术,2016(1):45-49.
[3]仇文顺,刘一宏, 马翔宇.基于 osgEarth 的三维输水管网系统设计与实现[J].河南科技,2014(19):137-139.
[4]李玮,刘彤.基于 osgEarth 的地形建模仿真[J].数据库技术,2014(1):212.
[5]ZHU J,WANG J H.Interactive virtual globe service system based on OsgEarth[J].AppliedMechanics&Materials, 2013,340:680-684.
[6]WUX D.Construction of urban 3D scene based on OsgEarth[J].Geospatial Information,2013,11(2):107-110..
[7]YU Y C,XU H W,WU X D.Research of the organization and scheduling of feature model of urban three-dimensional based OSGEarth[J].Geomatics& Spatial Information Technology,2014,37(11):63-67..
[8]CHEN B,REN Q, YANG H.Design and realization of 3D platform for digital earth based on OsgEarth [J].Electronic Science & Technology,2015,28(10):65-68..
[9]吴晓雪.基于的校园虚拟漫游及信息显示系统研究[D].大连:大连海事大学,2013.
[10]王金宏,朱军,卢秋阳,等.基于 osgEarth 的虚拟校园场景建模研究[J].地理信息世界,2011,9(1):65-71.