室内外实时一体化建模

摘要
近年来,随着电子地图逐渐开始从二维向三维转变,实时搭建室内外一体化建筑物模型对实现智慧城市中的室内导航服务具有重要的意义。在以往的三维模型构建中,主要是通过三角格网、高度场或BSP等方式,然而它们都存在成本太高,仅为表面表示方式,不易修改或适用场合有限等问题。本文采用了体素-三维建模方式,结合OpenGL图形接口,利用八叉树数据结构,更加美观高效的并且实时的构建三维模型。选择AutoCad中的平面图作为建模对象,通过添加高度,纹理等属性构建出三维模型,再对模型表面以及内部先后进行体素化。本研究中的体素-三维建模方式还可以为医学,地质学等构建三维模型,进行更加专业性的研究。
关键词:三维建模;体素;实时;
Abstract
In recent years, as electronic maps gradually begin to change from two-dimensional to three-dimensional, real-time building of indoor and outdoor integrated building models is of great significance for realizing indoor navigation services in smart cities. In the past three-dimensional model construction, mainly through the triangle grid, height field or BSP, but they all have the cost too high, only the surface representation, difficult to modify or limited application occasions. This paper adopts the voxel-three-dimensional modeling method, combined with the OpenGL graphic interface, and utilizes the octree data structure to construct a three-dimensional model in a more beautiful and efficient manner and in real time. Select the floor plan in AutoCad as the modeling object, construct a 3D model by adding attributes such as height and texture, and then voxelize the surface of the model and the interior. The voxel-three-dimensional modeling method in this study can also construct three-dimensional models for medicine, geology, etc., and conduct more professional research.
Key words:3D modeling; voxel; real time;

目录
第一章 绪论 4
1.1 选题背景及意义 4
1.2 国内外研究现状 4
1.3 存在问题 4
1.4 研究内容及技术路线 5
1.4.1 研究内容 5
1.4.2 研究方法 5
1.4.3 技术路线 5
第二章 体素及其应用 5
2.1 体素的概念 5
2.2 体素的应用 6
第三章 数据结构与接口 7
3.1 数据结构 7
3.1.1 八叉树的概念 7
3.1.2 八叉树的建立 8
3.1.3 八叉树的目的 9
3.2 接口 9
3.2.1 OpenGL的功能 9
3.2.2 OpenGL体系结构 10
第四章 算法实现 11
4.1 读取dxf 11
4.2 场景 12
4.3 相机 13
4.4 渲染器 14
第五章 结论与展望 16
5.1 结论 16
5.2 展望 16
致谢 17
参考文献 18

第一章 绪论
1.1 选题背景及意义
论文选题来源于现实生活,生活中大部分三维地图都是通过三维格网方式实现的,然而它存在一定的缺陷性。本课题可以实现实时的室内外一体化建模,在室内导航方面有着很好的应用,尤其是我们的建模要采用的体素-三维建模,是现阶段的软件中应用很少的,它克服了之前存在的问题,并且做到了实时构建模型。所以我们的课题其实是使用了一个创新的思路,去做一个现阶段很少见的应用。
1.2 国内外研究现状
三维网格是合乎当代硬件的建模方式,也是较自由的建模方式,而且有成熟的数字创作工具如 3ds Max 和 Maya。但其缺点包括建模成本高、仅为表面表示方式(可能无法判断一个任意点在其外还是其内)、不容易修改(尤其是在展开UV之后)、不容易做连续或离散级数的细致程度等。高度场和 BSP 的制作成本较网格低,而且较容易修改和实现 LOD,但其适用场合就非常局限。但是我们所采用的的体素-三维建模,在国内的应用很少见,国外比较火热,比如比较火热的游戏《我的世界(Minecraft)》,这款游戏就是应用的体素-三维建模。还有很多体素建模软件MagicaVoxel,Q-Block,Sproxel,VoxelShop。
本课题在国内外最大的应用就是在医学和地质建模上面,但是它们都是只能建立一个缩小版的模型,不能大范围的建模,而我们的课题就是在尝试体素-三维建模在大范围的应用。
1.3 存在问题
本课题的最大困难有两个,第一就是怎么进行压缩体素,对建模所需的时间进行压缩,使它可以更快的更接近实物的展现出来。第二就是怎么完成室内外一体的建模,因为我们不仅仅只做外观,还要对室内的一系列物品进行建模。
1.4 研究内容及技术路线
1.4.1 研究内容
本课题的研究内容主要是实现三维可视化的显示和操作,基于体素的制作方式带来了各种创新,提高模型品质并控制制作成本。然而,颠覆传统需要各方面的配合,模型设计、美术制作、实时性的编程都要注入新的思维,也必须辅以扎实的工具及制作流程。在引擎技术上,需要解决大规模世界的多分辨率建模、依 LOD 作资源串流、实时渲染、物理模拟、人工智能等各个方面的需求。
1.4.2 研究方法
本课题采用八叉树体素建模方法,解析dxf文件中的三维模型,使用opengl将dxf中的三维模型加载纹理,并可视化,实现在三维模型内外的三维漫游。
最后,我们对模型不断的训练,使其可以完成对多种不同的复杂建筑的实时建模,并不断的优化它的时间复杂度,使其可以更快的建立起最贴近实物的模型。
1.4.3 技术路线
本课题首先应用我们的算法对输入的平面图进行识别,然后在引用OpenGL对二维的平面图体素化,再利用等值面提取解决细致程度及容量问题,以完成对初步模型的渲染。

第二章体素及其应用
2.1体素的概念

体素( voxel)是一个体积 像素,用来表示三维空间中规则格网的值。类似于二维空间中用来表示二维图像数据的像素,是数据在三维空间分割上的最小单位。与二维像素类似,体素在空间中没有绝对位置的概念,只有相对位置,意即在构成单一张体积影像的数据结构中的位置。从理论来说,最小的体素单元可以是立方体的,也可以是多面体的,或球体的模型等等,但由于多面体和球体的单元数据结构和处理相对复杂,目前应用比较广泛的则是立方体的单元划分,本文的讨论也都是将最小体素单元视为立方体进行讨论的。

2.2体素的应用
体素的应用主要包括医学,游戏,地形三维建模的三个方面:
(1)在医学方面,通常可以把CT影像和体素联系到一起,搭建人体某各部位的体素模型,这样可以把患者该部位的结构,更加直观以及具体的展现给医生。
(2)在游戏方面,一些游戏公司喜欢用体素来进行对游戏场景的搭建,这样可以使画面更加的逼真,给游戏玩家的真实感。还有另外一种体素沙盒游戏,例如现在游戏市场上非常火热的“我的世界”,这款游戏它就给游戏玩家更高的自由度,以及一种全新的游戏体验。
(3)在地形三维建模方面,体素技术目前在地形环境可视化方面应用还不广泛,主要原因在于它需要较大的存储空间,并且运算量相当大,但是渲染效果却还比较理想。体素本身有着自身的特点,下面对基于体素模型的三维地形可视化方法与传统的三角网格的表示法作一些比较:
1. 数据结构
基于三角形网格模型的地形可视化建模数据源采用的是 DEM 或 TIN 高程数据; 纹理采用的是卫片、航片或手工纹理等纹理数据。基于体素模型的地形可视化数据除了能表达传统的高程数据外,还能表达包含地质属性的地形“体”数据、点云数据等。

2. 表示方法
基于三角形网格模型的地形可视化的渲染加速研究已经取得了大量的成果,并在基于 GPU 算法的渲染上也取得了突破。基于体素的可视化是通过 Marching Mesh 算法实现的网格提取,也可以通过GPU 渲染加速。
3. 地形表达
基于三角形网格模型的地形可视化在表现复杂的地形,如拱形、突起、悬垂和洞穴往往比较困难,而这些地形的表达在地理现象的模拟方面则是必需的。基于体素的表达方法则可以通过 MarchingMesh 算法比较容易地实现复杂的地形。
4. 地理过程模拟
地理过程模拟方面,如表示水土侵蚀、风力侵蚀、山体滑坡等过程时,由于网格模型是表面可视化,因此很难实现这些地理过程的表达。而基于体素的地形可视化是“体”可视化,在表达地理过程模拟方面有着明显的优势。
5. 地形实时变形和编辑
网格模型的地形可视化在进行地形的实时编辑时,由于需要网格重构和三角形建模计算,效率低下,并且实现起来很困难。而基于体素模型的体数据结构,在实时地形编辑和地形变化时能够得心应手。

第三章 数据结构与接口
3.1 数据结构
3.1.1 八叉树的概念
八叉树数据结构是由四叉树进行扩展应用到三维现象的一种三维空间数据结构,它的基本思想是将三维区域划分成三维栅格,每一个小正方体(称为一个体元或体素)有一个或多个属性数据。属性相同的区域用大块统一表示,而复杂区域用小块表示,把大块分为小块时以一分为八的规则划分。八叉树的原理与数据结构中的二叉树、四叉树的原理基本相同。二叉排序树可以实现应用在对一维序列的查找、四叉树可以应用在GIS 二维平面上的对象索引,八叉树结构也可以用做三维空间索引。如图3.1和3.2所示。
室内外实时一体化建模_第1张图片
图3.1 八叉树三维示意图(图源网络)

室内外实时一体化建模_第2张图片

图3.2 八叉树平面示意图
3.1.2八叉树的建立
空间对象可抽象为点、线、面、体四类。点对象直接存储其坐标值即可,线对象可以看成是由一系列线段组成的,面对象和体对象可以看成是由一组三角平面组成的。假设所有空间对象都在[ Xmin,Ymin,Zmin,Xmax,Ymax,Zmax]范围中。如图3.3所示。
室内外实时一体化建模_第3张图片

图3.3 八叉树空间索引(图源网络)

而想要建立八叉树空间索引,有两个基本问题要考虑:
一是在分解过程中应遵循的原则问题,这可以通过规定一个阀值K(K表示空间对象的个数)来解决,即只有当区域中空间对象的个数多于K个时,该区域需要进一步划分;
二是分辨率的问题,即分解时允许达到的最小子区是多大的问题,这可以规定一个不再需要分割的正方体大小(最小正方体的边长表示为n)。
在八叉树中,每个结点都对应于一个特定位置上特定大小的立方体。在对结点进行分裂时,需要判断结点中的空间对象是否完全包含在其子结点内;若是,将其放入该子结点内;若不是,则将其放入父结点内。点对象通过编码可直接判断;线对象只需判断组成线对象的一系列线段的端点是否在同一子结点内;面对象(或体对象)只需判断组成面对象(或体对象)的所有三角形的顶点是否在同一子结点内。

3.1.3八叉树的目的
本课题将想要构建的三维场景抽象成一个巨大正方体,将其分割成八块,每一子类都代表了场景中的一个房间,然后继续进行分割,同样,每一个子类代表了房间中的物品,例如桌子,花瓶等等,这样可以完整的体现出场景中的每一个要素。这在室内导航中是十分重要的。另外,由于这种方法充分利用了形体在空上的相关性,因此,一般来说,它所占用的存贮空间要比三维体素阵列的少。八叉树可以非常方便地实现有广泛用途的集合运算(例如可以求两个物体的并、交、差等运算),而这些恰是其它表示方法比较难以处理或者需要耗费许多计算资源的地方。不仅如此,由于这种方法的有序性及分层性,因而对显示精度和速度的平衡、隐线和隐面的消除等,带来了很大的方便,特别有用。
3.2接口
3.2.1OpenGL的功能
OpenGL是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。在OpenGL中允许视景对象用图形方式表达,如由物体表面顶点坐标集合构成的几何模型,这类图形数据含有丰富的几何信息,得到的仿真图像能充分表达出其形体特征;而且在OpenGL中有针对三维坐标表示的顶点的几何变换,通过该变换可使顶点在三维空间内进行平移和旋转,对于由顶点的集合表达的物体则可以实现其在空间的各种运动。而且OpenGL通过光照处理能表达出物体的三维特性,其光照模型是整体光照模型,它把顶点到光源的距离、顶点到光源的方向向量以及顶点到视点的方向向量等参数代入该模型,计算顶点颜色。因此,可视化仿真图像的颜色体现着物体与视点以及光源之间的空间位置关系,具有很强的三维效果。另外,为弥补图形方法难于生成复杂自然背景的不足,OpenGL提供了对图像数据的使用方法,即直接对图像数据读、写和拷贝,或者把图像数据定义为纹理与图形方法结合在一起生成视景图像以增强效果。
3.2.2OpenGL体系结构
一个完整的窗口系统的OpenGL图形处理系统的结构为:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,第五层为应用软件。如图3.4所示。
室内外实时一体化建模_第4张图片
图3.4 OpenGL层次结构

OpenGL是网络透明的,在客户机/服务器体系结构中,允许本地或远程调用OpenGL。所以在网络系统中,OpenGL在Windows或其它窗口系统下都可以以一个独立的图形窗口出现。由于OpenGL是一个与平台无关的三维图形接口,操作系统必须提供像素格式管理和渲染环境管理。OpenGL在Windows NT上的实现是基于Client/Server模式的,应用程序发出OpenGL命令,由动态链接库OpenGL32.DLL接收和打包后,发送到服务器端的WINSRV.DLL,然后由它通过DDI层发往视频显示驱动程序。如果系统安装了硬件加速器,则由硬件相关的DDI来处理。OpenGL/NT的体系结构图如图3.5所示。
室内外实时一体化建模_第5张图片
图3.5 OpenGL/NT结构体系
在OpenGL中,gl库是核心库。包含115个函数,函数名前缀为gl 。glu库是实用库。包含43个函数,函数名前缀为glu,封装了gl库。aux库是辅助库,包含31个函数,函数前缀为aux由glaux.dll负责解释实行。glut是实用工具库,具有良好的跨平台性。函数名前缀为glut。本课题所使用了的OpenGl函数如图3.6所示。
室内外实时一体化建模_第6张图片
图3.6 OpenGL函数使用

第四章算法实现
4.1读取dxf
首先通过AutoCAD绘制好本课题所需要平面图,设置好相关的属性,如图4.1所示。然后在AutoCAD中将平面图延展为三维图像,如图4.2所示。
室内外实时一体化建模_第7张图片
图4.1 所绘的平面图
室内外实时一体化建模_第8张图片
图4.2 所延展的三维图

4.2场景
场景是所有物体的容器,我们要将我们想显示什么东西,就需要将它加入场景中。场景,相机与渲染器在渲染实现方面有着巨大作用,有了这三个东西,我们才能成功将物体渲染。它们三者关系如图4.3所示。
室内外实时一体化建模_第9张图片
图4.3 场景,相机和渲染器的关系

其代码实现如图4.4所示。
室内外实时一体化建模_第10张图片
图4.3 场景类的实现
其中font()代表了场景中所用的字体;obj_dxf代表了场景中所引用的dxf文件;c代表了场景中使用的相机;texture,svetlo,texturovanie,ciary,anim和normals分别代表了场景中使用的纹理;fps表示每秒传输帧数,这里设置为200帧/秒。
4.3相机
在VC++6.0中相机的表示是Camera,它是相机的抽象基类,其子类有两种相机,分别是正投影相机和透视投影相机,如图4.5显示了正交摄像机投影和透视投影之间的差别。本模型采用的是正投影,这样可以是我们准确的得到模型中目标位置的准确信息。
室内外实时一体化建模_第11张图片
图4.5 正投影与透视投影

4.4渲染器
渲染器决定了渲染的结果应该画在页面的什么元素上面,并且以怎样的方式来绘制。模型本的渲染主要是对模型纹理的渲染,也就是纹理的映射机制。在这个模型里用的最多的就是二维纹理映射。
在二维纹理映射中,使用纹理,将物体表面的细节映射到建模好的物体表面,这样不仅能使渲染的模型表面细节更丰富,而且比较方便高效。纹理映射就是这样一种方法,在程序中通过为物体指定纹理坐标,通过纹理坐标获取纹理对象中的纹理,最终显示在屏幕区域上,已达到更加逼真的效果。实现代码片如图4.6。
为了使我们的模型可以更加的广泛使用,我们采取了,一种很方便的读取纹理图片的机制,即我们把在cad中的模型,图层以材质命名,然后在程序保重设立一个data的数据包,包含所有的材质–纹理图片,这样我们就增加了,该模型的兼容性,代码实现如图4.7.
室内外实时一体化建模_第12张图片图4.6 二维纹理映射机制

室内外实时一体化建模_第13张图片图4.7 纹理的文件流

第五章 结论与展望
5.1 结论
经过本次研究得出以下结论:通过体素—三维建模方法,在AutoCad中将二维平面图转换为三维立体图,利用八叉树数据结构,完成了模型外部与内部的体素化,解决了用来有效地解决传统建模的耗时长,以及无法达到室内外一体的局限性,完成了我们想要的实时室内外一体化建模,在室内导航的应用上有较好的效果。同时,通过对OpenGL的引用,验证出体素-三维建模在大型建模中的优越性,同时为以后的各个领域的建模提供一些技术参考。它可以应用在很多方面,它可以与VR结合,构造更加真实的游戏场景,或者实现“虚拟场景”的网上购物等等。还可以应用在医学,地质学,以及各种需要实时构建模型的专业性研究。

5.2 展望
鉴于时间问题,在以下几个方面还需要做进一步的工作。第一,虽然完成了实时室内外一体化建模,但目前我们只能做到模型中的三维漫游,缺少相应的地图属性信息,不能通过读取当前位置和输入目的地来显示出导航的路径,以便更加直接与精确地完成导航。第二,在压缩体素方面,由于设备和软件熟悉程度的限制,我们没有选择建模效果最好的方法,而选择了折中的方法,目前能满足室内导航的基本需要,但如果未来需求精度要求有所提升,则需要改变压缩体素的方法。

致谢

我们历时将近8个月时间终于该课题的研究完成了,在这段充满奋斗的历程中,我们收获了许多。在研究过程中遇到了无数的困难和障碍,都在同学和老师的帮助下度过了,他们给我提供了很多方面的支持与帮助,尤其要强烈感谢我的指导老师—奚大平老师,没有她对我们进行了不厌其烦的指导和帮助,无私的为我们进行研究的修改和改进,就没有我们这课题的最终完成。在此,我们向指导和帮助过我的老师表示最衷心的感谢!
同时,我们也要感谢本论文所引用的各位学者的专著,如果没有这些学者的研究成果的启发和帮助,我们将无法完成本课题的最终完成。至此,我们也要感谢我们的朋友和同学,他们在我们研究的过程中给予我了很多有用的素材,也在论文撰写过程中提供热情的帮助!金无足赤,人无完人。由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和同学批评和指正!

参考文献
[1]吴晓军,刘伟军,王天然.基于八叉树的三维网格模型体素化方法[J].工程图学学报,2005(04):1-7.
[2]林金花. 基于空间体素融合的三维重建算法研究[D].中国科学院长春光学精密机械与物理研究所,2017.
[3]解祥荣,徐海黎.三维模型的读取与体素化[J].南通大学学报(自然科学版),2011,10(01):29-34.
[4][1]朱响斌,唐敏,董金祥.一种基于八叉树的三维实体内部可视化技术[J].中国图象图形学报,2002(03):23-27.
[5]蒋秉川,游雄,夏青.一种基于体素的三维地形可视化方法研究[J].测绘通报,2013(03):46-49.
[6]柯芬,熊汉江,戴雪峰.一种基于体素的室内三维连通图自动生成算法[J].测绘与空间地理信息,2015,38(03):34-37.
[7]温佩芝,吴晓军,史泽林,于海斌.一种三维实体模型的离散表示方法[J].计算机工程与应用,2003(15):14-15+139.
[8]戴荣. 医学图像三维重建算法研究及实现[D].昆明理工大学,2009.
[9]郑顺义,王晓南,马电.一种便携式小型物体三维重建方法[J].武汉大学学报(信息科学版)
[10]任国印,吕晓琪,杨楠,喻大华.心脏体素化三维模型感兴趣血管交互式显示方法研究[J].内蒙古科技大学信息工程学院,包头医学院

你可能感兴趣的:(解题报告)