浅谈虚拟漫游中的碰撞检测问题的解决方法

2018-03-11 09:29郭艳
科技资讯 2018年25期
关键词:解决方法

郭艳

摘 要:在虚拟环境中,用户在交互与物体运动中,物体之间会发生相应的碰撞。虚拟漫游中碰撞检测属于关键技术,在虚拟漫游时,为避免观察者飞入地下、穿墙而过的不真实情况发展,应当积极开展碰撞检测,切实解决虚拟漫游中碰撞检测问题。本文首先对三角形与视点运动的检测算法进行了分析,并且对算法细节等进行了阐述,意在旨为实际工作选择协议提供有利参考,减少不必要的计算,不断优化其算法。

关键词:虚拟漫游 碰撞檢测 解决方法

中图分类号:TV147 文献标识码:A 文章编号:1672-3791(2018)09(a)-0013-02

虚拟漫游技术是VR的一个重要分支,该技术以其自身所具备的诸多特点,在多个领域中获得广泛应用,如建筑领域、航空航天领域、医学领域等。虚拟漫游技术具有如下特性:交互性、构想性、沉浸感、三维空间感等,这些特性的存在,使得该技术要远超其他漫游技术。借此,本文就虚拟漫游中的碰撞检测问题的解决方法展开浅谈。

1 三角形与视点运动过程中的检测算法

在虚拟场景漫游中,所有的视点全部都会被转化成为一个点,由此可将虚拟场景中的物体表面剖分成三角形,基于这一前提,便可将碰撞检测的相关问题,转化为点与三角形的碰撞问题。具体的碰撞检测步骤如下。

Step1:先对视点在上一帧及当前帧的位置进行准确记录。

Step2:对虚拟场景中的每个三角形进行遍历,从中找出当前三角形所处的平面。

Step3:如果视点的上一帧和当前帧的两个点分别位于平面的两侧,则可进行下一个步骤,若是不在平面两侧,则应当使虚拟场景中的下个三角形成为当前的三角形,并跳转至Step2。

Step4:当视点的上一帧和当前帧的两个点位于平面两侧时,虽然可以说明视点将平面穿透,但却并不能说明,点和三角形之间发生了碰撞,这是因为平面本身具有无边界的特性,故此,需要进一步判断视点所处的位置,即是否在三角形的三条边范围内,穿过平面。

Step5:当虚拟场景中视点与当前的三角形之间出现碰撞的情况,便可对当前帧所处的位置进行修正,从而使视点沿着与平面相平行的方向运动。虚拟场景中的所有三角形全都遍历一次后,视点的位置便是经过碰撞检测,并加以修正后的,可据此对场景进行渲染,并对当前帧的位置进行更新。

2 算法细节

对于虚拟环境而言,受到用户操作和物体运动的影响,使得环境中的物体常常会出现碰撞的情况,由此会对虚拟环境的真实性造成破坏,为避免此类问题的发生,需要对物体之间的碰撞进行及时检测,并对碰撞后的反映进行计算,据此对绘制结果进行更新,从而达到防止物体相互穿透的现象发生。目前,对虚拟场景中的物体进行碰撞检测时,较为常用的方法是借助包裹物体的包围盒,来完成碰撞检测。由于包围盒中的各条线段全都与坐标轴相平行,包围盒本身相当于一个体积较小的长方体,利用包围盒进行碰撞检测的最大优越性在于快速。然而,在很多可视化系统中,要想实现自然交互仅凭借包围盒检测无法达到预期中的目标。如果两个物体在虚拟场景中不相交时,包围盒的检测具有一定的效果,若是两个物体的包围盒有可能出现相交的情况时,但却又无法确保必定相交,这样包围盒的效果就会大打折扣。所有物体的表面全部都能剖分为三角形,为使碰撞检测结果的精度达到要求,可将之转换为三角形的碰撞。在上文中,简要分析了虚拟漫游中碰撞检测的具体步骤,下面重点对算法的细节问题进行解释。

2.1 三角形所在平面是否被视点穿过

在对视点是否从三角形所处的平面内穿过进行判断时,可将如下条件作为主要的判断依据:即两点与之确定直线相交平面所产生的交点位置关系。如果焦点N在两点之间,则表示视点从平面穿过,若是交点N在来不在两点之间,则表明视点并未从平面中穿过。下面对检测算法的具体细节进行分析。

从虚拟场景当中,找出当前三角形所在的那个平面,可从法向量与原点的距离对该平面进行表示,即v1=b-a;v2=c-a;其中的v1和v2均为向量,利用这两个向量的叉乘可以求出该平面的法向量vN;叉乘函数为vectorCross,vN=vectorCross(v1,v2),随后便可对平面至原点之间的距离f进行计算。点乘函数为vDot,对两点所确定的直线方向向量vLine进行计算。按照交点与两点所处的位置关系,对视点是否从平面穿过进行判断。可用函数position()对3个点之间所处的位置关系进行判断,当交点处于两点之间,则表明视点从平面内穿过;若是交点在两点的前面或是后面,则表明视点并未成功穿过平面。

2.2 观察三角形是否与视点有所接触

当视点从三角形所处的平面内穿过时,判断其是否与三角形之间出现碰撞的过程较为简单,具体方法是判断直线与平面之间的交点是否处于三角形的内部,若是交点存在于三角形的内部,则表明视点是从三角形三边范围内穿过平面,据此可以判断视点与三角形之间发生了碰撞;若是交点并不在三角形的内部,则说明,视点并未与三角形之间发生碰撞。对交点是否在三角形的内部进行判断时,可以采用如下方法:交点与三角形三个顶点的夹角和为360°时,该交点处于三角形的内部,交点与三角形三个顶点夹角和的计算方法如下:先获的当前顶点与交点之间的向量vA,据此得到下个向量vB,以循环的方法求出交点与3个顶点夹角的和,可以通过函数Angle Between对两个向量间的夹角进行求取,即:

Angle+=Angle Between(vA,vB)

若是计算所得的结果超过360°,并且交点处于三角形的内部,则可判断,该视点与三角形之间出现了碰撞。若是计算所得结果在360°以内,并且交点不在三角形的内部,则可以判断该视点并未与三角形之间发生碰撞。

通过大量的实践后发现,上文中的算法只能够在比较简单的场景且三角形数量较少的前提条件下运用,当虚拟场景过于复杂,并且其中的三角形数量较多时,该计算方法的运算速度便会显著降低,为使这种计算方法能够在大多数情况适用,对其进行了优化改进,通过过滤的方法,将计算过程中,不需要的数据全部滤除掉,从而减化计算流程。本文所采用的优化方法是分割过滤法,利用该方法可以将虚拟空间划分为规则的格网,这样便可将空间当中的物体分割成为更小的群组,在分割过滤的基础上,可使系统进行碰撞检测时的比较次数随之减少,这样一来,三角形的数量也会随之减少,一些不必要的运算得以简化,计算速度显著提升。

3 结语

综上所述,虚拟环境中的物体存在碰撞的可能性,为最大限度地保持环境的真实性,需要采用有效的方法对碰撞进行及时检测,并对碰撞之后产生的反应进行计算。在对碰撞反应进行计算的过程中,碰撞检测是不可或缺的先决条件之一,由此使其成为虚拟环境中的重要组成部分。本文应用VR技术中的虚拟漫游技术,提出碰撞检测问题的解决方法,对计算的细节进行详尽论述。

参考文献

[1] 李婷婷,余庆军.基于OpenGL的交互式虚拟漫游系统开发研究[J].计算机技术与发展,2017,29(10):109-110.

[2] 田军,孟祥娟.基于VRML模型和ASP技术虚拟漫游展厅构建的研究[J].电脑与信息技术,2017,21(4):54-55.

[3] 曾凌.基于全景图像的虚拟漫游系统在龙桥群展示中的应用研究[J].酒城教育,2018,16(6):87-88.

[4] 聂瑞.sketchup在计算机校园虚拟漫游中的运用[J].中国新通信,2017,25(3):65-66.

[5] 曹海龙,杨晓波.基于3dsMax和VRP的数字博物馆虚拟漫游系统设计与实现[J].甘肃科技纵横,2017,10(3):45-46.

猜你喜欢
解决方法
新形势下基层科技档案管理工作初探
新形势下离退休干部服务管理工作的问题与思考
铝冲裁废料堵塞的原因与解决方法探究
导学案在高中数学教学中存在的问题及解决方法
小学数学教学中存在的问题及其解决方法
农村移动网络覆盖探讨
针对回转式空气预热器漏风问题解决方案的研究
高职英语教学中存在的问题与建议