摘 要:利用计算机进行交通虚拟现实是当今研究交通问题的一种重要手段。交通虚拟现实技术是在经验研究和数学方法的基础上,利用现代系统工程和计算机虚拟现实技术成果发展起来的新的交通研究方法。由于虚拟现实技术可有效地体现交通系统中交通运行的复杂过程,可按试验要求实现交通状况的再现,大大降低了现场调查的工作量,现己成为分析各种交通流、检验各种拟定交通设施、交通控制方案的有力工具。
关键词:虚拟现实技术;公路设计;3Dmax
一、引言
随着公路交通事业的发展,对公路的线性设计也提出了新的要求和挑战。加之计算机软硬件技术的快速发展,计算机虚拟现实技术在公路设计中的应用可以促进公路勘测、设计、评价已经变得越为重要和势在必行。
二、公路计算机虚拟现实辅助设计
(一)公路平面线形辅助设计
公路平面是公路在地平面上的投影,公路的平面设计就是确定公路的走向和平面组成要素,以及各要素的参数信息,最后定出公路逐桩坐标。在平面设计中首先要根据地形等高线确定起点、终点和中间的路面控制点。这些点确定了将要设计出来的公路的大致走向和弧度。
在公路设计中如何在等高线上选定控制点,需要考虑很多因素,如:
1.平面线形应连续、与地形、地物相适应,与周围环境相协调。
2.要保持平面线形的均衡与连贯。
3.避免产生连续急弯的线形。
4.要满足公路设计规范对各级公路平面线形设计要求。
选定公路控制点后,要完成公路的组成计算,公路平面线形主要是由直线——缓和曲线——圆曲线——缓和曲线——直线这样的方式组合而成。其相关的参数计算方法。
(二)公路纵断面辅助设计
沿着道路中线竖直剖切然后展开即为路线纵断面,它总是一条有起伏的空间线,公路纵断面设计主要的任务是根据汽车的动力特性、道路等级、当地自然条件以及工程经济等,研究起伏空间线几何构成的大小及长度,以便达到行车安全迅速、运输经济合理及乘客舒适的目的。这些要求必然需要公路要有好的纵断面组成。纵断面图是道路纵断面设计的主要成果,也是道路设计的重要技术文件之一。把道路的纵断面图与平面图结合起来,就能准确的定出道路的空间位置。
在纵断面图上有两条主要的线:一条是地面线,它是根据中线上各桩点的高程而绘制的一条不规则线,反映了沿着中线地面的起伏变化情况;另一条是设计线,它是经过技术上、经济上以及美学上等多方面比较后定出的一条具有规则形状的几何线,反映了道路路线的起伏变化情况。
在系统中纵断面设计线是由直线和竖曲线组成的,直线即均匀坡度线,有上坡和下坡之分,在直线的坡度转折处为平顺过渡的一段缓和曲线,这段曲线就是竖曲线,按坡度转折的形式不同,竖曲线有凹有凸。
三、道路模型的建模
虚拟场景中,实体建模是主要的部分,也是最重要的场景内容。而在虚拟场景中,三维实体包括静态和动态两种。顾名思义,静态模型指那些地形、实物等实体模型,包括建筑物、道路、道路周围附属物、树木花草等;动态模型指处在运动状态的各种实体模型,如运动的汽车等。
道路模型在漫游系统中,道路是静态的场景,又是主要的交互对象,因此,对它的建模采用几何建模的方法。
关于道路实体模型的建立,首先是获得建模数据,道路的高程数据和几何形状以及曲线、拐角、弯度等数据来自平面图、剖面图等建筑图纸,此外还包括具体的尺寸和比例。在基础数据的基础上建模完成后,还要对模型进行相应的纹理映射,纹理数据的来源主要是实体的正向照片,也只有正向拍摄的照片才有纹理利用价值。
其次是模型的建立,根据CAD图纸,在3Dmax中建立三维模型,注意尺寸比例的因素,尽量减少线性的大幅度变化,注意隐藏面的消隐,减少系统内存的占用,提高运行速度和效率。本系统中,模型导入OPenGL前是没有纹理的,所需要做的工作就是将所拍的照片制成纹理图片格式存储起来,在openGL中,由函数make Image( )产生调用,并且所有纹理映射的初始化工作都在程序myinit()中进行。由g1TexImage2d()说明一个全分辨率的图像,其参数指出了图像的尺寸、图像类型、图像位置和图像的其它特性,接着连续调用函数g1TexParameter* ()说明纹理怎样缠绕物体和当象素与纹理数组中的单个元素不能精确匹配时如何过滤颜色;再接着用函数g1TexEnv*()设置画图方一式为GL_ DECAL;最后,调用函数glEnable()启动纹理映射。
四、虚拟漫游系统的设计
场景的导入涉及到的问题首先是导入格式的要求。对于三维模型的存储有obj , max以及3 ds等格式,.max是3Dmax的专有文件格式,3 ds是通用的3D文件格式,可以导入多种三维软件文件,是一个标准文件格式。本文的三维模型使用的是3Dmax创建,存储的格式为.max,而.max文件格式是符合文档方式,每个插件都可以输出自己的格式到max文件当中,所以直接解析max文件并不是一个可取的方法。若要将三维模型导入到OpenGL中,包括以下几种方法:
(1)首先将.max文件转化为.ads形式,再使用3ds2c这种软件工具,将.ads文件转换成为OpenGL的c语言程序,然后把模型部分复制出来,由OpenGL读取即可,但是转换为C语言程序后,如果出现错误,不容易找出错误并进行改正。并且这时的模型是死的,运行时不宜改变;
(2)可以使用3dwin软件直接将3ds格式转换为OpenGL格式;
(3)可以将模型文件导出成gl.h的形式,导入工程文件头文件中即可;
(4)将.max文件转换为3ds 文件后,在OpenGL中编写调用函数进行模型的读取。
(5)使用3D Exploration软件读入模型的ads文件,通过另存将其转化成能为OpenGL所用的.cpp文件,最终转化后的文件是由大量的浮点数组成,这些浮点数包含了模型面、材质、顶点、法线和纹理等的全部信息,并按照这些属性分类。然后我们在OpenGL程序中专门定义一个读取模型参数的类,在此类中实现读取相应的浮点数的函数的所有功能,再在主程序中调用。这段代码运行后,这些变量中就会存入对应表示相应属性的数据。最后再编程遍历所有的顶点,法线,纹理,从而生成模型。通过这种方法实现ads格式的模型导入,编程简单,但是缺点也很明显,生成的.cpp文件体积较大,无论是存储或传输都很不方便。
基于上述说明,本文采取第四种方法,先在3Dmax里把模型做好,物体间的相互位置排列好,同时注意模型的材质要用贴图的方式,OpenGL里不支持多维材质(OpengGL里贴图丢失一般是这个原因),把模型坍塌成polygon,再导出成.ads格式,把贴图文件jpg格式,ads文件放到VC++工程目录下。
在将模型导入OpenGL中时,需要对模型进行的纹理坐标的提取编程,以读取模型的纹理坐标。对于读取模型的纹理坐标等信息,OpenGL编程中需要用到3中主要的数据结构:顶点,多边形列表和相关三角形列表。顶点集是顶点及其法向量的列表,多边形中的顶点将用在下标表示,OpenGL将这个数组视为一个顶点数组。这里存储的法向量是每一个顶点的法向量,而不是多边形的法向量。多边形列表包括一些列的材质,一个材质由这样一组属性组成:漫反射颜色、光照度、和纹理映射等。与每一种材质相对应的是一组三角形,每一个三角形由一组三元整数组表示,它们分别是三角形每个顶点在顶点集中的下标。相关三角形列表与顶点集具有相同的大小,它是一个指向多边形列表每一个包括该顶点的三角形的链表。相关三角形列表被用来建立每个顶点的法向量。有了模型各种属性的信息,我们就可以在创立显示列表中根据这些指针变量中存入的相应数据来再现模型。在创建新的显示列表((g1NewList)中,使用glBegin(GL TRIANGLES)和g1End()函数来绘制模型,所有具体属性的绘制均在这两个函数之间实现。对于每一个面的绘制,都是先赋好材质,再定义法线和渲染纹理,这些工作都完成后,就可以通过绘制顶点来绘制面了。
四、结论
在公路辅助设计中大量使用虚拟现实技术,为公路的平面设计、纵断面设计和横断面设计提供可视化的平台,使整个设计工作可以随时看到三维仿真结果,保证了公路线形组合设计的合理性。
参考文献:
[1]公路路线三维可视化设计研究进展 廖明军 森林工程 2004/06
[2]OpenFlight三维公路模型设计参数的获取 陈涛 长安大学学报(自然科学版) 2009/02
[3]3维公路GIS的设计与实现 何东坡 测绘与空间地理信息 2007/01