Unity3D支持的DEM地形三维可视化表达技术实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

龙源期刊网地形三维可视化表达技术实现作者:陈淑姝甘淑来源:《软件导刊》2018年第01期摘要:近年来,三维地形可视化、三维空间分析已经成为三维地理信息系统领域的前沿问题。为改正传统GIS中面三维将高程坐标仅仅作为附属坐标而导致无法构建地形真三维模型,同时也无法提供地下信息的缺点,基于Unity3D游戏引擎和ArcGIS平台,采用任意地形灰度图为数据源,将灰度图转化ASCII栅格文件读入Unity3D中,最终利用Gameobject中Cube元素,实现了DEM中规则格网模型的真三维展示,利用Gameobject的Mesh元素,采用顺时针索引数组实现了DEM中TIN的真三维展示,由于U3D引擎具有独立的Y坐标(在U3D中高程坐标以Y轴表示)特性,使其能够创建真正意义的真三维模型,同时可以在摄像头上添加镜头旋转脚本以实现模型的360度浏览。关键词:地理信息系统;三维;真三维;DEM;Unity3DDOIDOI:10.11907/rjdk.172439中图分类号:TP317.4文献标识码:A文章编号文章编号:1672-7800(2018)001-0208-04Abstract:Inrecentyears,3Dterrainvisualizationand3DspatialanalysishavebecomethefrontproblemofGIS.ForsolvingthedisadvantagesintraditionalGISthatelevationcoordinatesjustassubsidiarycoordinates.Thiscausesthetrue3Dmodelofterraincannotbeconstructedandcouldnotretrievetheinformationofunderground.TheDEMmodelisgeneratedbyUnity3DandArcGISplatform,turningrandomgrayscalemapintoASCIIrasterfilethenimportitintoUnity3D.TheGridofDEMisgeneratedbytheCubeofGameobjectandthemeshofGameobjectemploysclockwiseindexarraytocreatetheTINofDEM,duetoYcoordinatesinUnity3Disindependent(elevationcoordinatesarerepresentbytheYaxis),thetrue3Dmodelcanbeconstructedatthesametimeaddsthecamerarotationscripttomaincameracanseethemodel360degree.KeyWords:GIS;3D;true3D;DEM;Unity3D0引言随着计算机技术、空间技术和现代信息基础设施的发展,地理信息系统已拓展到测绘、土地、环境、交通等各个领域,发挥着日益重要的作用[1]。地形作为重要的自然景物,拥有数据结构复杂、数据量庞大的特点,地形的应用在GIS中占有重要地位。随着GIS应用的不断深龙源期刊网入,作为第三维的高程信息显得越来越重要[2]。一些二维GIS和图象处理系统在处理高程信息时并未将高程变量作为单独变量,而是将其作为附属变量处理,这种做法虽然满足了地表地形信息的表达要求但是造成了地下信息的缺失,因此它们在国际国内也被俗称为2.5维的系统[3]。出于严密性考虑可将此称之为“地形面三维”或简称面三维。面三维的GIS实质上是二维GIS系统[4]。在真三维中,一个空间物体是通过X、Y、Z三个坐标轴加以定义的,Z值将不再是附属,而是一个完全独立的变量。真三维的优点是具有连续的数据结构和与之相应的分析功能,由此带来的好处是可以更直观地展现模型并且从空间角度对其进行相应分析[5]。Unity3D作为一个近年来大热的三维游戏引擎,具有兼容操作系统、跨平台发布并部署、开发简单易上手、人机交互功能强大、三维效果逼真、内置网络功能的特点,被广泛运用于游戏开发和虚拟现实[6,7]。U3D本身自带地形建模功能,可以通过画笔或者导入高度图的方式生成地形,本文将U3D运用到系统仿真的同时把ArcGIS与Unity3D结合,以一种新的方式构建相关真实地形,实现DEM的真三维显示。1方案建立空间数据模型是对现实世界一种抽象、归类及简化的描述[8]。三维空间数据模型是研究三维空间几何对象的数据组织、操作方法以及规则约束条件等内容的集合[9]。三维模型的开发需要注意三方面问题:①明确要模拟的对象;②数据存储与数据之间的逻辑关系;③模型显示。本文以ASCII栅格文件为描述对象建立相关DEM模型,建立流程如图1所示。2数据预处理将DEM数据(见图2)加载到ArcGIS中,打开工具箱使用重采样工具将其导出为100×100的DEM数据,再使用工具箱中的数据转换(栅格转ASCII)将导出后的数据保存为txt格式,并命名为Grid.txt(见图3)。3Grid模型生成生成Grid模型核心思想是利用StreamReader读入文件,再用Split()函数将每个元素依次读出,把每个象元值当作高程,以100×100的规模利用Cube构建出DEM(见图4)。生成DEM的主要代码为:list=ReadFile(Application.dataPath+/Resources,Grid.txt);for(inti=0;i{position=list[i].ToString().Split(newChar[]{''});龙源期刊网(intj=0;j{cube=GameObject.CreatePrimitive(PrimitiveType.Cube);cube.transform.position=newVector3(i,float.Parse(position[j])/20,j);cube.transform.localScale=newVector3(1,float.Parse(position[j])/10,1);cube.GetComponent().material.color=getcolor(float.Parse(position[j]));}}为了使其更有层次感,设置getcolor函数返回不同高度立方体的颜色,代码如下:privateColorgetcolor(floatvalue){if(value0&&value{returnc1;}elseif(value50&&value{returnColor.blue;}elseif(value100&&value{returnColor.yellow;}elseif(value150&&value龙源期刊网{returnColor.green;}else{returnColor.white;}}4TIN生成TIN的建立思路是利用mesh生成TIN,依此遍历ASCII文本的每个像元值,作为每个顶点的Y坐标,核心代码为:list=ReadFile(Application.dataPath+/Resources,Grid.txt);for(inti=0;i{position=list[i].ToString().Split(newchar[]{''});for(intj=0;j{ver[index]=newVector3(i,float.Parse(position[j])/10,j);index++;}}确定了顶点以后,需要将顶点按照一定的次序排列进组[10],索引数组存储mesh顶点的索引值如图5所示。龙源期刊网个三角形构成,按顺时针顺序构造三角形,核心代码为:for(intc=0;c{for(intd=0;d{//三角形1tri[dex++]=c*100+d;tri[dex++]=(c+1)*100+d;tri[dex++]=(c+1)*100+d+1;//三角形2tri[dex++]=c*100+d;tri[dex++]=(c+1)*100+d+1;tri[dex++]=c*100+d+1;}}其中tri[]为索引数组,将tri的值赋给mesh.Triangles即可,之后添加一个Button,程序运行时单击Button即可看到TIN(见图6)。DEM生成后,为了方便360度无死角观察模型,还应该添加一个镜头旋转脚本[11],主要代码为:voidLateUpdate(){if(Input.GetAxis(MouseScrollWheel)!=0){Distance-=Input.GetAxis(MouseScrollWheel)*mouseWheelSentive;龙源期刊网}if(Input.GetMouseButton(0){if(target){AngleX+=Input.GetAxis(MouseX)*xSpeed*0.02f;AngleY-=Input.GetAxis(MouseY)*ySpeed*0.02f;}}else{if(Input.GetKey(KeyCode.W)){AngleY-=0.5f;}elseif(Input.GetKey(KeyCode.S)){AngleY+=0.5f;}if(Input.GetKey(KeyCode.D)){AngleX+=0.5f;龙源期刊网}elseif(Input.GetKey(KeyCode.A)){AngleX-=0.5f;}}Rotation=Quaternion.Euler(angleY,angleX,0);Camera.transform.rotation=rotation;Position=rotation*newVector3(0.0f,0.0f,-distance)+target.transform.position;Camera.transform.position=position;}脚本编写完毕之后,将其挂在MainCamera之上便可以360度浏览模型,对Scene进行发布,选择相应存储位置,便可由任意用户进行浏览,如图7和图8所示。5结语地形构建运用十分广泛,例如可以根据某一区域的历史数据演变规律,结合GIS空间特性,进行灾害模拟,为政府和有关机构提供及时有效、准确可靠的决策信息,使减灾、防灾、救灾等有更充分的科学依据;同时地形构建可用于军事领域,如结合地形进行可视域分析;地形构建同样也可应用于游戏中。基于Unity平台建立DEM将Unity3D和ArcGIS做了很好的结合,且将U3D引擎运用到计算机仿真中,利用Cube实现了格网DEM的真三维展示,利用Mesh实现了TIN的真三维展示模型,笔者下一步将在地形模型基础上进一步研究流团模型构建算法,以此模拟泥石流运动规律。参考文献:[1]黄应全.浅谈地理信息系统在测绘领域的扩展应用[J].企业技术开发,2013,32(11):53-54.[2]师向东.基于场景图的GIS三维可视化技术研究与实现[D].沈阳:东北大学,2008.[3]房玉龙.可视化技术在地下管线信息系统中的应用[D].南京:南京大学,2005.龙源期刊网[4]肖乐斌,钟耳顺,刘纪远,等.三维GIS的基本问题探讨[J].中国图象图形学报,2001,6(9):842-848.[5]姜小轶,孙运生,王安.三维地理信息系统(3D-GIS)的发展现状及趋势[J].世界地质,1988,17(4):58-62.[6]马龚丽,杨敏,支

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功