三维巷道场景中虚拟漫游路径优化研究
2018-03-05程芳,徐华
程 芳,徐 华
(1.北京化工大学 信息科学与技术学院,北京 100029;2.北京石油化工学院 信息工程学院,北京 102617)
0 引 言
随着数字化进程在金属矿山领域的发展,视景仿真技术和虚拟漫游技术越来越多地运用到矿山生产等各个领域。而巷道是矿山的重要组成部分,在矿山开发建设过程中发挥着重要作用。为了实现矿山数字化,建立矿山井下三维虚拟显示体系,最为基础的部分在于构建矿山井下巷道的三维可视化模型。而虚拟漫游是虚拟现实技术的重要应用,它将真实的场景在屏幕上进行显示,实现了对三维景观的数字化和虚拟化。为了使三维地理场景的逼真性和精细程度有所提高,漫游路径的设计成为了虚拟漫游最重要的内容[1-6]。
大多数虚拟漫游场景是校园、房屋或者山地、河流等开阔地带,并且大多都是交互式漫游,但是用在矿山巷道的真实场景中的技术较少。由于矿山巷道环境的复杂性(拐弯处和坡道较多),目前基于给定路径的自动漫游技术研究较少。文献[4]运用Cardinal样条曲线的方法处理路径,但是对一些两点之间较长的路径效果不好;文献[5-6]分别采用了三次B样条和转角处细分的方法对路径进行光滑处理,但是对于较窄的转弯处达不到预期效果;对此,文中提出基于线性插值和Cardinal[7]样条曲线相拟合的方法对路径中较长段和狭窄处进行处理,以实现矿山巷道虚拟漫游[6-7]。
文中实现了矿山三维巷道模型构建、三维巷道场景显示,并基于OpenGL对模型进行绘制、模型变换、视点控制,实现虚拟巷道场景漫游。在线性插值的基础上运用Cardinal样条曲线对漫游路径进行优化,从而达到视觉上的逼真性。
1 三维巷道建模
1.1 巷道模型构建
利用现有的矿山井下AutoCAD图纸,筛选出矿井巷道实体对象并提取有用的二维巷道信息转换为三维空间信息,并基于3ds MAX三维建模软件构建巷道基本模型,在现有的巷道建模方法的研究基础上,提出巷道中心线加巷道断面模型方法建立巷道模型。
对巷道进行空间分析之后,将巷道模型分为巷道交叉部分和巷道非交叉部分。在构建这两部分模型时,将矿山巷道非交叉部分的对象分为巷道中心线和巷道截面。巷道中心线的信息通过给定的AutoCAD图纸信息提取出来,包括各个段的坐标点、导线点及倾斜角度,作为整个巷道体的基本骨架,如图1(a)所示;巷道截面信息根据实际提供的具体情况而定。主要采用3ds Max基于样条曲线的多边形建模技术对两个部分进行建模,如图1所示。
图1 巷道建模示意图
1.1.1 巷道截面建模
根据某矿山提供的实际数据表明,巷道截面分为两种:矩形截面和拱形截面。其中主巷道为拱形(上半部为半圆弧,下半部为矩形)截面,其他巷道如采掘巷道、上(下)巷道为矩形截面。选定中心线某一个开始点作为基础点,在其垂直于中心线的部分做截面,矩形截面通过多边形建模直接得到,对于拱形截面的半圆弧部分,为了使结果更加真实,将半圆弧等分成22段,每段长度为π/22。然后其他部分根据图纸提供的数据高度值做出下半部分巷道,如图1(b)所示。
1.1.2 巷道交叉部分建模
由于矿山巷道错综复杂的地形,巷道交叉处理使其交汇贯通实现无缝连接是重要的一步。采用基于面模型的建模方法对巷道交叉部分进行处理[8],巷道交叉有一条出入或者多条出入的情况,但最终都会在一个终点交汇。为了使其互相连通,对交叉部分进行探测,除去多余的部分。其实质是通过空间三角形相交探测求出巷道间的交线,交线将其分为两个部分,然后再重新进行三角形剖分,删除多余部分的三角形后得到最后的结果。利用3ds Max建模软件,结合布尔运算等操作处理巷道交叉部分[9-10],如图1(c)所示。
1.2 巷道模型输出
矿山开采面临多种不确定的安全隐患,比如矿井突水、瓦斯爆炸、局部塌方等,其中矿井突水对于计算机仿真来说,其真实性最不容易保障。水流的模拟受多种因素的影响,为了使水流模拟更加真实有效,选用3D打印技术复原出矿井管道的实物来进行水流实验[11]。实验中使用熔融沉积制造(fused deposition modeling,FDM)3D打印技术。
FDM又称熔丝沉积,是一种快速成型技术[12]。FDM是将低熔点材料熔化后,通过计算机数控的精细喷头按CAD分层截面数据进行二维填充,喷出的丝材料经冷却粘结固化生成一薄层截面,层层叠加成三维实体[13]。实验中使用的打印机型号为MakerBot2,矿井管道打印的流程如下。
1.2.1 数据准备
把制作好的地矿模型转化为快速成型领域的标准格式STL,导入Magics软件中添加厚度为2 mm。
1.2.2 模型检验
根据分析和实际使用经验,可以总结出4类基本错误:法向错误,属于中小错误;面片边不相连,如裂缝或空洞、悬面、不相接的面片等;相交或自相交的体或面;文件不完全或损坏。
1.2.3 模型分层
对管道模型进行检查和修复后,因为受打印机大小的限制,先把模型截断为适合打印机大小的部分,再进行分层,分层后的层片包括轮廓部分、内部填充部分和支撑部分。
1.2.4 模型建造
分层后得到的文件通过Makeware处理成打印机能识别的模式,放入打印机芯片中,开始建造模型。
1.2.5 后续处理
加工过程结束后,对每部分模型进行检验及后续处理。清理残余物和一些粉末,然后对模型进行固化处理,用专用胶水对零散的模型进行粘贴,最后加上支撑,完成整个过程。由于模型太大,这里只展出部分模型,如图2所示
图2 矿井管道模型3D打印效果
2 巷道场景漫游
2.1 OpenGL可视化
为了实现矿山巷道的三维场景漫游,首先需要把建立好的巷道模型导入到.net环境中,基于OpenGL实现模型的绘制及漫游。由3ds MAX输出的.3ds模型经过转换把得到的点和三角形的数据信息存储在.txt文件中,并对模型进行平移或放大(缩小)等变换,使模型跟实际数据相符合。其次,对所有坐标数值进行数据重置,并确定模型的中心点坐标位置,以便于对模型进行调整和移动。然后在场景中导入设定好的路径文件,获得其三维坐标信息,使用键盘响应函数实现“M”键按下时沿着既定路径进行漫游[14]。模型(灰色)及其路径(黑色)如图3所示。
图3 巷道模型示意图
视点变换是虚拟漫游中重要的一步,根据键盘响应函数可以实现前后移动、左右移动、垂直移动、上下俯仰移动、左右旋转、左右翻滚。文中运用了OpenGL图形库中的视点变换函数gluLookAt(),该函数通过改变视点参数中视点的位置和视点的观察方向等,进而改变视窗内物体的相对位置。通过不断更新视点位置来实现对场景的虚拟漫游[15]。
由于模型路径在方向上的复杂性,需要对gluLook At()的原理进行分析后,创建一个新的函数LookAt(float*eye,float*center,float*upV)进行视点变换。通过改变函数的参数值,进而比较当前帧和前一帧的方向角是否大于(小于)90°,来确定是取反还是不变,输出响应的函数值,避免了当场景漫游路径为非直线时翻转现象的发生。
2.2 路径漫游
2.2.1 路径显示
矿井巷道的视点路径追踪是根据指定的视点路径数据进行位置的移动变化,从而实现对地下矿井巷道的虚拟漫游。其视点路径数据主要取自矿井巷道中各个路段的中心轴线,然后应用OpenGL技术对路径集合PPath中多个路径进行绘制显示,使用函数glPointSize与glLineWidth设定路径视点数据的大小和线的宽度。再使用函数glBegin()与glEnd(),在函数之间放入视点路径数据坐标,从而完成对视点路径的绘制。
管道模型路径数据显示如图3中黑色线所示,可以看出各个视点路径均处在矿井的路段中,并且矿井管道是由多个路段组成的,在路段与路段连接处存在一定的弯度,路径在拐弯处也有连接。
2.2.2 线性样条路径漫游
对场景进行视点路径追踪,其宗旨是其逼真性和精细程度,所以对漫游路径的设计成为了虚拟漫游的重要内容。在对路径不加任何优化的前提下进行追踪发现点与点之间间隔太大,产生了跳跃和失真,在拐弯处尤其明显,不能真实有效地对巷道进行观察。
根据此类问题,首先采用了线性插值方式进行处理。如图4(a)所示,视点路径数据点由P1P2…Pn组成,在漫游过程中摄像机视点依次通过各坐标点来实现对场景实体对象的观察。该方法存在的问题是PiPi+1之间的距离过大会忽略敏感重点区域的观察,PiPi+1之间的方位角或俯仰角过大会造成视点在漫游中的跳跃突变与急速转向,造成视觉上的压力。
图4 数据插值处理示意图
如图4所示,在路径视点线性插值之前,视点是直接从P1-P2,再从P2-P3,而P1P2或者P2P3距离过大导致视点快速移动。为解决因采样视点路径点之间距离过大而忽略敏感重点区域观察,可以在路径视点之间进行线性插值,在敏感区域进行细分、非敏感区域进行粗分,从而实现对各采样点进行等分插值处理。在集合Pi{P1,P2,…,Pg}中前后两个视点之间距离是不一致的。根据序号在点集合中查找两点坐标,计算两个连续视点之间的距离PathVertex[Pj+1]-PathVertex[Pj],在集合CV{C1,C2,…,Cg}查找当前等分的数目,根据需要进行插值点的个数,逐个计算出产生的各个插值点坐标,如图4(a)(白色点)展示了插入的Q11Q12Q21…Qni路径点。
当P1P2构成的向量同XZ平面(水平)产生的角度较大,就会有明显的视点俯仰跳跃。线性插值仍然无法解决存在的问题,当在连接点处的视点移动改变成Q12-P2-Q21这个过程,∠Q12P2Q21角度如果等于180°,那么表示三点在一条直线上,视点漫游的过渡非常平滑,如果角度很小,一旦∠Q12P2Q21≤90°,那么Q12-P2-Q21视点漫游会存在短暂的突变,降低了视觉展示效果。视点路径在漫游中的突变、跳跃与急速转向可以通过拟合光滑曲线数据来解决,文中提出基于线性插值和Cardinal样条曲线相结合的拟合算法,并对该算法进行改进以提升视点漫游的效果。
2.2.3 Cardinal曲线拟合算法
Cardinal样条的实质是插值的分段三次曲线,并且每条曲线段的端点位置均指定切线。Cardinal[16-17]算法的优点是一个控制点的斜率数值可以由相邻的控制点坐标计算得出。一个Cardinal样条完全由四个连续控制点给出。中间的两个点是生成的曲线线段的端点,其他的两个控制点用来计算端点的斜率。如图4(a)所示,可以简单归纳为Pn-3,Pn-2,Pn-1,Pn四个点生成了曲线P(u),其中P(u)的两个端点为Pn-2和Pn-1,端点Pn-2的切线方向平行于Pn-3Pn-1,端点Pn-1的切线方向平行于Pn-2Pn。
Pn-3到Pn之间四个控制点用于建立Cardinal样条段的边界条件,决定P(u)曲线,其中设定:
P(0)=Pn-2
(1)
P(1)=Pn-1
(2)
(3)
(4)
(5)
其中Mc表示为:
(6)
将上述矩阵展开得到:
P(u)=Pk-1·CAR0(u)+Pk·CAR1(u)+Pk-1·
CAR2(u)+Pk+2·CAR3(u)
(7)
其中,CAR0(u)、CAR1(u)、CAR2(u)、CAR3(u)表示为:
(8)
2.2.4 线性等分插值与Cardinal曲线拟合的组合算法
如图4所示,根据Cardinal样条曲线插值原理对线性插值后的各个数据点进行处理,通过计算得到P1-Q11-Q12-S1-S2…的曲线。可以看出,在转弯处对直线转弯转化为对曲线转弯,使效果更加真实。图4(b)、(c)、(d)是对巷道中视点路径进行线性插值和Cardinal样条曲线拟合后的结果,其中图(b)是截取的有较大转角的路径,图(c)是图(b)中黑色圆圈部分的扩大图,且经过线性插值处理后半径较小的黑色插值点,图(d)是图(c)中黑色圆圈部分的扩大。经过Cardinal样条曲线插值处理后,能更加清晰地看出,在线性插值后1和2两个点之间生成曲线并且插值得到9个点来形成一段曲线。
具体的算法流程如图5所示。
Step1:读取坐标数据,计算两点之间距离,然后计算线性等分插值次数。
Step2:根据插值次数值,生成坐标数值并存入数据集合中,判断计数器的值。
Step3:输入Cardinal曲线拟合的张量参数与曲线点数量,计算生成的坐标点数据存入数据集合,运用OpenGL显示得到的Cardinal曲线。
3 实例应用分析
基于某矿山的实际数据,通过上述的建模分析及构造,将输出的.3ds格式文件导入到.net环境中,在OpenGL环境下成功地绘制出模型,并对模型进行表面填充,使模型更加逼真。然后成功导入视点追踪路径后对两种插值方式进行仿真和分析,并对两种仿真结果进行比较,结果表明基于线性插值和Cardinal样条曲线相结合的拟合算法达到了预期效果。选取图4中一条路径进行模拟和分析,如图6所示。
图5 线性等分插值与Cardinal曲线拟合组合算法流程
图6 视点路径图及插值漫游结果
图(a)分别对应图4(d)中1和2的位置,即线性插值后在拐角处的漫游转弯需要两步即可完成,但明显发生图像跳变现象,而经过Cardinal插值处理后在1和2之间形成了9个点来完成转弯处的漫游;图(b)是提取出的四幅图,表明转弯平稳且无跳跃现象。表明当只有线性插值的情况下,漫游失真,没有真正达到逼真性的要求;而在两者相结合的情况下,效果最好。
4 结束语
研究并实现了对三维巷道场景中虚拟漫游路径的优化。利用基于样条曲线的多边形建模方法成功建立三维巷道模型,并在VS平台下使用OpenGL导入模型、绘制模型、模型渲染及沿给定路径实现场景的自动漫游。在基于线性等分差值和Cardinal样条曲线拟合的算法下对漫游路径进行优化,实现了视点在三维巷道场景中的漫游,避免了视觉抖动和场景跳跃现象。该算法适用于各种复杂三维虚拟场景,并能够生成光滑的漫游路径,实现场景虚拟漫游。
[1] 修春华,孙秀娟,车德福,等.三维场景中虚拟漫游路径的优化设计方法[J].金属矿山,2015(4):242-245.
[2] BANDI S,THALMANN D.Path finding for human motion in virtual environments[J].Computational Geometry,2000,15(1):103-127.
[3] 侯建光,朱月霞,宋 震.矿山巷道三维建模数据组织与算法研究[J].国土资源信息化,2014(5):29-33.
[4] 吴玲达,赵 健,杨 冰,等.一种虚拟场景的自动漫游方法[J].小型微型计算机系统,2010(8):1562-1566.
[5] 胡 英,侯 悦,徐心和.基于双距离场的三维中心路径提取算法[J].中国图象图形学报,2003,8(11):1272-1276.
[6] 刘雁菲,邵晓东,李 申.基于Vega的虚拟漫游场景中的路径规划研究[J].计算机技术与发展,2008,18(6):9-12.
[7] 尚建嘎,刘修国,郑 坤.三维场景交互漫游的研究与实现[J].计算机工程,2003,29(2):61-62.
[8] 陈良周,任兰花.一种基于面模型的巷道三维自动建模方法研究[J].上海地质,2010,31:262-264.
[9] 高红森,栗继祖.基于3D和VIRTOOLS的煤矿安全行为模拟[J].太原理工大学学报,2010,41(1):106-109.
[10] 孙 卡,翁正平,张志庭,等.基于带约束三角剖分的三维巷道建模方法[J].矿业研究与开发,2007,27(5):64-65.
[11] 张嘉易,刘伟军,王天然,等.快速成型数据处理系统研究[J].机械设计与制造,2004(1):80-82.
[12] 郭新贵,汪德才,刘亚东,等.快速成型的切片数据优化[J].制造技术与机床,2002(3):30-32.
[13] 刘伟军.快速成型技术应用[M].北京:机械工业出版社,2004.
[14] 王 玉,徐 华,杨 欢.基于OpenGL的视点追踪与系统实现[J].北京石油化工学院学报,2014,22(2):20-25.
[15] TIAN C,ZHANG J,GUO H P.The design of hydraulic virtual roaming system based on virtual reality technology[C]//International conference on fluid power and mechatronics.[s.l.]:IEEE,2011:775-778.
[16] FANG G.Recovery of band limited functions via cardinal splines[J].Science in China,2001,44(9):1126-1131.
[17] HEARN D,BAKER M P.计算机图形学[M].蔡士杰,译.第3版.北京:电子工业出版社,2010.