三维校园电子地图.docx

上传人:b****6 文档编号:16219031 上传时间:2023-07-11 格式:DOCX 页数:23 大小:142.33KB
下载 相关 举报
三维校园电子地图.docx_第1页
第1页 / 共23页
三维校园电子地图.docx_第2页
第2页 / 共23页
三维校园电子地图.docx_第3页
第3页 / 共23页
三维校园电子地图.docx_第4页
第4页 / 共23页
三维校园电子地图.docx_第5页
第5页 / 共23页
三维校园电子地图.docx_第6页
第6页 / 共23页
三维校园电子地图.docx_第7页
第7页 / 共23页
三维校园电子地图.docx_第8页
第8页 / 共23页
三维校园电子地图.docx_第9页
第9页 / 共23页
三维校园电子地图.docx_第10页
第10页 / 共23页
三维校园电子地图.docx_第11页
第11页 / 共23页
三维校园电子地图.docx_第12页
第12页 / 共23页
三维校园电子地图.docx_第13页
第13页 / 共23页
三维校园电子地图.docx_第14页
第14页 / 共23页
三维校园电子地图.docx_第15页
第15页 / 共23页
三维校园电子地图.docx_第16页
第16页 / 共23页
三维校园电子地图.docx_第17页
第17页 / 共23页
三维校园电子地图.docx_第18页
第18页 / 共23页
三维校园电子地图.docx_第19页
第19页 / 共23页
三维校园电子地图.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

三维校园电子地图.docx

《三维校园电子地图.docx》由会员分享,可在线阅读,更多相关《三维校园电子地图.docx(23页珍藏版)》请在冰点文库上搜索。

三维校园电子地图.docx

三维校园电子地图

三维校园电子地图(上)

访问734次

作者:

李纳璺 陈金龙阮方舟

 

1引言

   随着计算机技术,特别是计算机图形学、三维仿真技术以及虚拟现实技术的飞速发展,传统的

二维电子地图被注入了新的活力,三维电子地图正成为电子地图发展的一个重要方向。

传统的二维

电子地图只能以图形和符号的方式来呈现一张地图,这种方式往往不能直观清晰的表示出地图所在

位置的地理环境;采用三维电子地图的方式,建立场景的仿真模型,把现实场景进行虚拟再现,真实、互动、情节化的特点是虚拟现实技术独特的魅力所在。

  如何设计一个仿真度高,并且具备虚拟漫游和智能导航的三维地图引擎,成为三维电子地图研究领域的一个热点问题。

本文研究的设计的三维电子地图引擎系统,设计了模型动态加载接口,并具备智能导航和虚拟漫游引擎,实现了三维校园仿真电子地图。

它为校园规划建设、游客观光导航、学校对外宣传等方面提供了一个智能化的平台,为广大系统用户提供了极大的便利。

开展虚拟校园三维地图仿真引擎系统及相关课题的研究适应了信息社会发展的趋势,具有重要的理论和现实意义。

   本文对从DirectX技术着手,采用MicrosoftVisualC#编程语言结合三维图形开发包(ManagedDirectXSDKAugust2007)在框架中构建的三维校园电子地图程序。

该程序实现了桂林电子科技大学的(东区)的三维校园电子地图的功能。

除此之外,在可视化的基础上实现了一些虚拟现实的交互操作和空间分析,如:

校园景物的查看、校园路径导航、三维动态漫游校园等;给需要了解桂林电子科技大学校园地理信息的用户提供了极大方便。

2本课题研究的内容

   本课题是一个使用ManagedDirectX的三维图形技术实现的一个三维校园电子地图程序,该程序是在框架下建立完成,开发语言为当今最流行的高级语言MicrosoftVisualC#。

它是以桂林电子科技大学东校区为实景,进行了校园虚拟仿真,建立了具备观光浏览与智能导航为一体的多媒体三维校园电子地图程序。

   本课题主要是研究了三维建模技术在程序中的导入技术、三维模型的优化、虚拟现实技术、Floyd算法实现的智能导航技术、Alpha混合与Alpha测试技术、三维场景中的光照技术、XML技术、用户交互控件技术等等。

这些技术将全部应用到三维校园电子地图程序当中,最终展示出集视觉、听觉、用户智能交互于一体的校园仿真三维地图。

3 开发环境与相关技术简介

ManagedDirectX与托管代码版DirectX语言支持

(1)ManagedDirectX

   DirectX是一系列低级的应用程序接口(APIs),它用于创建游戏和其他高执行效率的多媒体程序。

它包括对高效的2D和3D图形、音效和音乐、输入设备、力反馈设备、多媒体流和多人游戏的网络通信程序。

三维校园电子地图程序的三维环境漫游引擎的构建就是使用ManagedDirectX的图形

处理技术来完成的。

(2)托管代码版DirectX语言支持

   在DirectX下,开发者在使用托管代码的时候,能够利用DirectX的多媒体功能和硬件加速。

托管代码版DirectX允许访问大多数原始的非托管DirectX功能。

下面是被DirectX和DirectXSDK支持的托管代码语言:

MicrosoftVisualC#

MicrosoftVisualBasic.NET

MicrosoftVisualC++

MicrosoftJScript.NET

   在三维校园电子地图程序中,采用的是MicrosoftVisualC#、MicrosoftDirectXSoftwareDevelopmentKit(SDK)August2007来开发。

(3)ManagedDirectX包含的组件

   托管代码版DirectX由以下主要组件构成。

(1)Direct3DGraphics提供了一个单一的API,你能使用它进行3-D图形编程。

(2)DirectDraw提供直接的低级访问显存和高速渲染。

(3)DirectInput提供对于多种输入设备的支持,包括对力反馈技术的完全支持。

(4)DirectPlay提供多人网络游戏的支持。

(5)DirectSound提供播放和捕捉预录制数码采样的支持。

(6)AudioVideoPlayback允许回放和简单控制音频/视频媒体。

(4)ManagedDirectX的优点

   通过消除COM组件对象模型的互通层,托管代码版DirectX改善了执行性能。

托管代码能减少代码体积和提升工作效率。

继承于强大易用的Microsoft.NETFramework公共类型的接口更加直观。

托管代码也把你从处理很多内存管理的任务中解放了,这些任务比如释放对象。

   ManagedDirectX还提供了简单的3D程序框架,三维校园电子地图就是基于这个框架而开发的一个3D应用程序。

使用ManagedDirectX很大程度上减少了繁重的初始化操作。

由于代码运行于  Microsoft.NET虚拟机之上,开发的语言为MicrosoftVisualC#,所以程序能够自动回收垃圾,避免了内存的泄露,还降低了代码复杂度,便于Web接口的开发。

三维坐标系与几何图形学

   在使用DirectX开发三维校园电子地图程序之前,首先要对3D图形学的数学基础有一定的了解,根据三维校园电子地图程序的需求,需要掌握以下几个方面的知识点:

(1)向量以及向量的运算;

(2)3D坐标系;(3)面和顶点法线;(4)3D物体的构成。

(由于篇幅有限,加上难度不大,以上4点在此不作详细介绍。

关于Floyd最短路径算法原理,Alpha混合与测试原理,三维场景中的光照技术类型请读者参考相关书籍):

4 系统总体设计

   三维校园电子地图程序是把桂林电子科技大学东区的校园实景虚拟再现,除能够实现普通地图的功能以外,还能够进行三维的景点观光和智能路径导航等功能。

系统总体开发流程框架如图4-1所示:

图4-1系统总体开发流程框架

   构建一个三维校园电子地图系统需要按照以下几个关键步骤来进行程序的开发:

(1)数据采集:

获取校园的相关建筑数据以及地理环境信息;

(2)平面图制作:

从获取的相关数据中提取有用信息,建立校园二维平面图;

(3)三维模型的建立:

建立校园场景中的建筑模型、场景小品模型、天空环境模型和地形模型等;

(4)开发漫游导航引擎:

使用程序来实现模型导入、三维场景的漫游、导航功能。

   三维校园电子地图漫游导航引擎作为该项目的核心部分,它主要实现的目标是:

实现将3dsMax建立的模型导入引擎,把所有模型组合成一个校园整体,导入音乐,加载天空、地形以及环境小品等对象,构建成一个集音乐与用户交互的三维校园互动程序。

将更加直观的把整个校园场景展示出来,以便于该软件的使用者迅速了解桂林电子科技大学(东区)校园的地理信息。

相关数据的采集

(重点说明:

作为学习或做Demo版,通过实地和GOOGLE卫星图获题材是一种十分可取的方法)

   在开发三维校园电子地图之前,首先要对校园的各方面数据进行收集,由于大量的建筑数据以及校园平面景观布局图纸可以从校方直接获取,也可以通过实地取材和互联网资源来获取相关数据(我们的数据是采取此法)。

   校园建筑的模型比例数据、贴图数据、布局位置全部是通过实地取材得来,由于学校东区面积比较大,建筑复杂多样,导致数据采集工作量很大,用了近两个星期,使用数码相机在校园各个角落获取数码照片近10000张,将校园所有景观囊括在内。

建筑轮廓基本是从高层楼顶拍摄,然后通过照片的对比和组合得到建筑的实际外形和轮廓数据,通过互联网的GOOGLE卫星图获取建筑之间的比例数据以及平面布局数据,通过照片的剪切获取景物的纹理贴图数据。

二维平面图的制作

   校园二维平面图的制作在三维校园电子地图的开发过程中是相当重要的一个环节,二维平面图制作的好坏直接影响到三维立体图的效果。

因为三维地图的建模是完全基于二维平面图而建立的,如果二维平面图的比例不正确,就不可能制作出精确的三维地图。

制作二维平面图的还有个作用,就是生成导航引擎程序的小地图导航地图功能。

可见二维平面图的制作必须准确无误。

   为了控制好二维平面图的比例和相关建筑的位置精确,本系统使用了Google卫星照片来做底图作为二维平面图的绘制参考。

然后再使用AutoCAD2007来绘制线条,这样便能达到精确绘制的目的。

底图是通过Google卫星照片拼接而成,首先在电脑上安装。

在搜索框中输入桂林电子科技大学的位置:

25°17'"N,110°19'"E以获取校园的卫星照片。

为了得到清晰的底图,获取图片是采取分次获取,然后使用Photoshop合并成一张完整的桂电东区校园底图。

如图4-2所示:

图4-2桂林电子科技大学(东区)卫星图

4.2.1建筑平面框图

获得了校园的平面底图以后,将它导入进AutoCAD2007作为外部参照的地图,用CAD的直线和曲线绘制工具按照底图建筑的轮廓绘制出外形,就得到一张CAD导出平面图文件。

该文件的最终效果如图4-3所示:

图4-3校园平面图

   有了这张平面地图,就能够使用3DMAX导入*.dwg文件作为底图参照,然后绘制出等比例的校园3D模型。

三维模型的建立(建筑模型和环境小品模型的建立在此不作介绍)

   地形模型建立:

桂林电子科技大学整个东区校园的地形样式比较丰富,由山坡、河流、以及高低不同的坡面,这个地形的模型制作加大了难度。

在校园东区地形的创作中,我把整个学校当作一个区域,按照CAD地图建立一个大平面,然后在这个大平面上切割出许许多多个小面,再通过多边形修改器来分区修改这些小面。

在地形中,比较矮小的坡度(如:

路边沿等)则不进行3D建模,而是使用贴图取而代之,这样将会最大程度上减小程序的开销。

在实时虚拟系统中,它们应该使用尽可能少的面,获得尽可能少的面的方法是在建立模型时使用合适的方式,当把贴图赋给实时模型时,也应该使用最少的面。

所以这类模型在建立时主要用二维的模型结合透明贴图来创造出三维的模型效果,即用贴图来代替细节模型。

得出高低不同的坡面以及河流等模型。

最终完成的地形图如图4-4所示:

         图4-4地形模型

三维漫游导航引擎的构建

   创建三维校园电子地图引擎系统是使用C#语言结合MicrosoftDirectXSDK来完成的,是基于MicrosoftDirectXSDKSampleFramework来建立引擎框架,调用了Microsoft为我们提供的类库。

这些已经完成公用类全部放在..\MicrosoftDirectXSDK(August2007\Samples\Managed

\Common文件里面,创建三维校园电子地图程序的时候需要将这些公用类包含到该项目当中,使用这个框架相当于为引擎提供了一个快速开发3D程序的一个空框架,在这个框架中创建三维校园漫游导航的3D程序。

为三维校园电子地图程序提供了丰富可利用的3D程序接口。

引擎总体框架如图4-5所示。

图4-5引擎总体框架

4.4.1三维引擎的设计目标

   该三维漫游导航引擎主要具备以下功能:

(1)能对整个校园模型进行全局俯视以及任意视角的观察,以便让用户更加全面的了解校园每一处的地理信息;

(2)能够让用户自定义选择所需要加载的三维模型,以便适应显卡配置较低的用户,通过读写XML文件来保存用户的配置信息;

(3)能够设置不同的分辨率,以满足用户的需求;

(4)采用FLOYD算法计算校园每两个景点的最短路径,实现校园每一个景观的智能导航功能;

(5)在导航模式中,实现小地图标示位置功能,让用户快速的了解自己所在校园的具体位置;

(6)实现用户控制摄影机的移动功能,并且能控制移动的速度;

(7)实现三维漫游场景的音乐导入,使三维校园程序效果更加丰富;

(8)实现光照效果,使得场景模型更加富有层次感。

4.4.2三维地图的程序引擎的框架介绍

   三维校园电子地图的漫游导航引擎是使用MicrosoftVisualStudio2005来进行编码,该项目工程中包含了以下的文件列:

(1)common文件夹:

里面包含了MicrosoftDirectXSDKSampleFramework的所有类库;

(2)UI文件夹:

包含了用户控件的压缩纹理,以及用户控件的一些信息;

(3)文件:

程序的主入口;

(4)文件:

控制整个引擎;

(5)文件:

层级的基类;

(6)文件:

控制主层操作级;

(7)文件:

控制主层级模型加载;

(8)文件:

读取模型素材层级;

(9)文件:

控制菜单层级;

(10)文件:

控制配置层级;

(11)文件:

控制模型对象;

(12)文件:

控制HUD模型对象;

(13)文件:

显示背景图片;

(14)文件:

显示小地图;

(15)文件:

显示提示点;

(16)文件:

实现最短路径算法;

(17)文件:

实现X文件加载;

(18)文件:

实现音乐的加载;

(19)文件:

实现音效的加载。

(20)GuetRes文件夹:

包含了所有模型的X文件、纹理贴图文件、声音文件、背景图片文件、XML用户配置文件以及场景元素文件,用于存放引擎的所有资源。

4.4.3引擎的主入口

   文件包含了Project类,该类继承了DirectXSDKSampleFramework的两个IFrameworkCallback,IDeviceCreation类,是整个三维校园电子地图程序的入口。

主要负责初始化程序中所需要的设备以及处理程序的所有消息,处理3D程序循环体中负责更新程序物体和渲染物体的方法,这两个方法分别是:

OnFrameMove()和OnFrameRender()。

下面对这主要函数的功能做简单的介绍:

(1)OnFrameMove()

   该函数在任何帧发生之前调用,根据程序时间对场景(例如,动画)的位置进行更新。

(2)OnFrameRender()

   绘制场景,在调用返回后DirectX将交换链中的下一个缓冲区的内容显示在屏幕上。

(3)OnCreateDevice()

   该函数用于创建设备,实例化Campus3D类,并且设置层级的光照效果和透明贴图。

(4)IntPtrOnMsgProc()

   处理引擎的控制消息,接收用户发出的消息。

(5)OnResetDevice()

   当窗口发生重置(如窗口分辨率发生变化)时调用,重新设定窗口的宽度和高度,设置设备的渲染状态RenderState,并且触发引擎主控制类的重置函数。

   在设备的创建以后,实例化了Campus3D类。

这个类是负责处理整个三维校园程序,在该类中的构造函数中设置了程序资源的路径。

设置如下:

   +"\\GuetRes\\");

该类用来设置创建程序渲染的当前层级CurrentLever,在Campus3D类被初始化的时候就实例化了当前层级为MenuLevel,使得程序一开始运行就进入菜单窗口;

   三维地图漫游导航引擎使用了两种摄像机camera和cameraHUD。

设置这两种摄像机的作用如下:

(1) camera

摄像机camera被定义成第一人称摄像机,负责渲染程序的动态主场景;

(2) cameraHUD

摄像机cameraHUD被定义成球型摄像机,负责渲染用户的菜单和静态的HUD模型;

4.4.4引擎的层级

   层级在三维电子地图执行的各个阶段中,包含了这个阶段所特有的元素和逻辑的对象。

本引擎一共使用了三个层级:

菜单层级、设置层级和主程序层级。

每个层级往往有自己特定的更新和渲染函数。

   中包含了BaseLevel抽象类,他是整个程序所有层级的基类,其中声明了其派生类所调用的所有方法,它的构造函数用于重置整个层级。

它定义的抽象方法主要有以下几个:

protectedabstractvoidInitializeGraphics();  

4.4.54.4.6文件格式,这种格式的文件是能够支持Directx的模型文件,它记录了模型的所有顶点位置和贴图的纹理路径以及模型在世界中的坐标等信息。

三维引擎为了得到这些模型的相关数据,就必须得建立相关的文件读取类来读取X文件中的各种模型数据。

   文件包含了Meshes类,用于加载使用3DMAX导出的*.X模型文件,它将X文件中的纹理以及物体的顶点抽取出来,为3D程序渲染物体提供所需要的资源。

   Meshes类将模型的顶点以及贴图信息成功读取以后,为了方便引擎的调用,将它们的所有网格都保存在MeshHolder这个类里面。

该类中使用了一个Meshes的泛型变量列表来保存这些网格的信息。

publicListMyMeshes=newList();4.4.7、PicShow类和PointShow类来实现的。

这三个类他们都是用于加载图片,所以函数的实现方式基本一样,只是显示的位置和大小有所不同。

   Background类是用作菜单层级的背景图片显示的,它在所有其它物体之前被渲染,位于屏幕中所有其他物体的后面,不会受到摄像机位置的影响,不会影响程序的进行。

它的目的完全用于美化场景。

   这三个类的共同点是:

(1)使用VertexBuffer对象创建并且分配顶点缓冲区来保存顶点信息;顶点缓冲区必须包含4个顶  点,使用适当的信息来填充缓冲区。

(2)使用Reset(floatx,floaty,floatWidth,floatHeight)函数来创建位置和纹理坐标,在Render()函数中设置好所要加载的图片和纹理,而后场景渲染在设备调用的BeginScene和EndScene之间完成。

4.4.8引擎的音乐

   为了丰富三维校园程序,在程序运行时,会加入背景音乐,以更好的渲染出环境的气氛;而加载音乐是通过文件中的Music类来实现。

Music类继承于IDisposable类,里面包含了音乐的加载、播放、停止和暂停的控制函数,用以实现背景音乐的播放功能。

三维校园电子地图(下)

访问1138次

作者:

李纳璺 陈金龙阮方舟

 

 

5 三维引擎的功能模块设计

  设计三维校园电子地图引擎系统包含了以下主要功能模块的设计:

(1)用户交互界面设计;

(2)智能导航设计;

(3)模型加载和渲染;

(4)光照处理;

(5)天空盒设计;

本节将对这些主要功能和技术的实现进行详细介绍。

用户交互界面设计

5.1.1用户界面设计

   用户界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。

而且设计良好的用户界面能够引导用户自己完成相应的操作,起到向导的作用。

同时界面如同人的面孔,具有吸引用户的直接优势。

   本系统的主菜单界面采用

天际蓝作为主色调,背景使用桂林电子科技大学东区的标志性建筑物图片加以衬托,中间再使用三维仿真模型场景加以点缀,充分体现了软件的主体内容和风格。

主菜单界面如图5-1所示。

 

 

图5-1主菜单界面

程序运行的主界面以三维仿真场景为主,按照三维程序常见的做法,把二维平面地图放置在窗口的左上角,二维图下面放置的则是用户相关操作控件。

符合人们的操作习惯,整体效果简洁大方,再加上背景音乐的渲染,有让人置身于其中的感觉。

设计主程序界面如图5-2所示。

图5-2主程序界面

用户控件设计

在三维的场景中,要使得程序与用户之间进行互动,就必须得使用到UI用户界面。

而由Direct3D进行渲染的三维程序中直接使用Windows的控件明显是不可行的。

因此,在三维校园电子地图引擎中的用户控件的创建,我直接调用了DirectX框架的UI支持,创建了DirectX的用户控件。

在三维校园电子地图引擎中,除了主菜单使用了UI以外,在设置界面也大量的使用了支持Directx的CheckBox控件来设置模型的隐藏和显示;在程序的主层级当中,也使用了ComboBox控件来选取所要寻找的景点,还用到了Slider控件来调节移动的速度。

UI的创建过程如下:

(1)将Directx示例文件夹中的UI文件夹复制到当前项目中,该文件夹中包含了UI的外观模型与UI的贴图文件,贴图文件如图5-3所示,该图像就是所有用户控件的贴图压缩纹理;而则是控件的模型数据。

图5-3UI的压缩纹理

(2)将UI的外观数据添加到项目当中以后,要在程序中调用这些信息来创建控件。

首先要定义一个Dialog对象,然后在这个Dialog对象上加载所需要的控件。

privateDialogDlg_UI=null;etLocation(20,360);

……(由于代码太多,需要请与编辑部联系)

}

(5)光把UI加入到对话框中还不能使得UI在三维的场景中显示出来,必须得对他进行渲染才能使得已经设置好的控件按照所指定的位置显示出来,渲染控件的代码当然是放在Level的Render()函数中完成了。

写法如下:

(elapsedTime);

(6)制作UI本身就是来接受用户所发出的消息,要求UI完成的最后一步是将消息传递给控件,这让它们从用户那里接收键盘和鼠标事件。

在MsgProc中,程序调用对话框MsgProc方法传递消息。

如果对话框的MsgProc返回true指明消息已经被处理,程序将noFurtherProcessing参数设置为true并立即返回就是非常重要的。

没有这样做的话将会导致消息被不止一次的处理。

noFurtherProcessing=(hWnd,msg,wParam,lParam);

if(noFurtherProcessing)

  returnnoFurtherProcessing;

添加完成消息传递函数之后,控件就能接收用户发出的消息。

智能导航设计

智能导航在三维电子地图程序中是难点部分,它将自动的寻找出用户所需到达的目的地的最短路径,并且进行跟踪导航。

要实现最短路径的搜索功能,本引擎采取基于结点的最短路径算法——弗洛伊德(Floyd)算法。

该功能模块的流程图如下图5-4所示:

图5-4智能导航模块流程图

在三维校园电子地图程序中,将Floyd算法运用到各个景点之间来求得他们的最短路径,下面将介绍如何在程序中实现基于Floyd算法的智能导航模块。

(1)Floyd算法是通过邻接矩阵来实现的,因此首先要给每个景点排序,按照校园建筑的分布与坐标,将校园定义了149个结点,他们之间的关系如下表5-1所示:

表5-1邻接矩阵的坐标与邻接点的定义

序号

X坐标

Y坐标

邻接点

0

-96

-4608

1

1

-108

-4500

2

2

-108

-4140

3,18,86

3

576

-4140

4,5,6

4

1836

-4140

8

5

720

-4032

null

……

……

……

……

146

-2096

1824

147

147

-1392

1968

148

148

-1248

1904

149

149

-736

1904

null

 

(2)有了结点的坐标与他们之间的关系列表之后,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2