一种基于前线的包围盒碰撞检测方法

文档序号:6423020阅读:488来源:国知局
专利名称:一种基于前线的包围盒碰撞检测方法
技术领域
本发明属于计算机检测技术领域,具体涉及一种基于前线的包围盒碰撞检测方法。
背景技术
快速精确的连续碰撞检测(CXD)是基于物理仿真、虚拟环境、机器人运动规划等技术领域的重要研究课题。连续碰撞检测方法通过插值物体的运动路径将碰撞检测问题转化为非线性多项式方程的求根问题,可以检测出物体在连续运动过程中发生的碰撞时刻和位置。对于柔性模型内部以及它们与周围环境间的快速连续碰撞检测的问题,一直被广泛关注。由于这些场景中可能包含着分裂物体或正在发生形变的柔性物体,所以碰撞检测过程非常耗时,对于由几百万个三角形组成的复杂场景更是无法获得交互式的响应速度。近年来,处理器研发的总体趋势为从单核发展为多核,再发展为众核,四核处理器已经成为目前CPU市场的主流产品。在CAD/CAM或虚拟现实应用中,高档图形工作站通常具有8-16个核心。在这种多核/众核架构的发展趋势下,如何充分利用所有核心的计算能力,如何在多核间均勻分配计算负载,以获得最优的内存和Cache利用率,已成为本领域诸多研究者的关注热点。目前传统的包围盒碰撞检测方法都是利用BVH(包围盒层次结构)与BVTT(包围盒测试树)来加速计算,通过对BVTT中节点的重叠测试,剔除不重叠的节点。对于柔性物体,更新遍历BVH的计算量随着模型顶点位置的改变而变化,同时由于BVTT结构复杂,对其进行节点访问与重叠测试,容易造成处理器负载度的剧烈变化以及存储访问模式的不规则,严重影响了碰撞检测的效率。

发明内容
本发明提供了一种基于前线的包围盒碰撞检测方法,通过引入前线的链表结构在处理器间均衡计算负载,提高了处理器的负载均衡度,改善了存储访问模式的规则性,提高了碰撞检测的效率。一种基于前线的包围盒碰撞检测方法,包括如下步骤(1)对待检测的三角形网格柔性场景模型中的每个三角形构造对应的包围盒,进而建立所述的三角形网格柔性场景模型的包围盒层次结构;(2)根据所述的包围盒层次结构,构建包围盒测试树,通过对包围盒测试树进行包围盒重叠测试,生成前线,对前线进行包围盒重叠测试,输出存在包围盒重叠的叶节点;(3)对输出的叶节点对应的两个包围盒内的三角形对进行精确碰撞检测。所述的前线是一种存有包围盒测试树中节点的链表。所述的步骤O)中,生成前线的过程为首先,自顶向下对包围盒测试树中的非叶节点进行包围盒重叠测试,若不存在包围盒重叠,将该非叶节点存入前线;然后,排除存入前线的非叶节点所对应的若干叶节点;最后,将包围盒测试树中未排除的所有叶节点存入前线。优选的技术方案中,所述的步骤(1)中,当进行第η次碰撞检测时,包围盒层次结构是根据第η次碰撞检测时刻每个三角形的空间位置,对上一次碰撞检测过程中的包围盒层次结构中最底层的包围盒进行重构,进而自底向上对上一次碰撞检测过程中的包围盒层次结构进行整理更新而成的,η为大于1的自然数;可相应提高了碰撞检测的速度。优选的技术方案中,所述的步骤O)中,当进行第m次碰撞检测时,前线是根据包围盒层次结构,对上一次碰撞检测过程中的前线进行扩展生成的,即对上一次碰撞检测过程中的前线中的非叶节点进行包围盒重叠测试,若存在包围盒重叠,将该非叶节点分解成对应的若干叶节点并存入前线,m为自然数且eN+2 ^m^e (N+1),N为自然数,e为前线重构代数,且为实际经验值;能够提高处理器的负载均衡度,改善存储访问模式的规则性,提高碰撞检测的效率。优选的技术方案中,所述的包围盒为16-D0P包围盒,保证了碰撞检测过程的高效性。本发明的有益技术效果是通过对包围盒重构以及对包围盒层次结构(BVH)整理更新,缩短了碰撞检测的时间,对于支持BVH的碰撞检测方法具有很好的扩展性;通过引入前线的链表结构在处理器间均衡计算负载,提高了处理器的负载均衡度,改善了存储访问模式的规则性,提高了碰撞检测的效率。


图1为本发明碰撞检测方法的步骤流程示意图。图2(a)为BVH的结构示意图,图2 (b)为BVTT的结构示意图。
具体实施例方式为了更为具体地描述本发明,下面结合附图及具体实施方式
对本发明的碰撞检测方法进行详细说明。如图1所示,一种基于前线的16-D0P包围盒碰撞检测方法,包括如下步骤(1)构建包围盒层次结构。对待检测的三角形网格柔性场景模型中的每个三角形构造对应的16-D0P包围盒,进而建立三角形网格柔性场景模型的包围盒层次结构;当进行第η次碰撞检测时,包围盒层次结构是根据第η次碰撞检测时刻每个三角形的空间位置,对上一次碰撞检测过程中的包围盒层次结构中最底层的16-D0P包围盒进行重构,进而自底向上对上一次碰撞检测过程中的包围盒层次结构进行整理更新而成的,η为大于1的自然数。为每个三角形构造对应的16-D0P包围盒首先将被包围三角形的顶点分别在各个方向上进行投影,然后判断这些投影是否落在包围盒的外部,如果落在包围盒外部,需要对该方向上包围盒的范围进行调整,保证该投影恰好落在边界上;对于16-D0P包围盒,任何一个三角形顶点都需要做16次比较,判断这个点是否落在包围盒内部。将每个三角形对应的16-D0P包围盒,作为BVH中最底层的16-D0P包围盒。在第一次碰撞检测时,采用自顶向下的方法构建BVH,首先计算出这些三角形的中心,将这些三角形中心投影到直角坐标系的某个坐标轴上,依据投影的正负,可以把它们分成两部分,分别为它们构造包围盒。然后采用同样的方式,对这两个包围盒进行细分,直到包围盒中只包含一个三角形。如图2(a)所示,有一个由a、b、c、d四个三角形组成的场景Al,首先计算出这些三角形的中心,将这些三角形中心投影到某个坐标轴上,依据投影的正负,可以把它们分成两部分,一部分记为Bi,另一部分记为B2,分别为Bl和B2构造包围盒。然后采用同样的方式,对B1、B2进行细分,直到包围盒中只包含一个三角形。在随后的碰撞检测过程中,只需要对BVH中的非底层的包围盒大小进行重新计算。这是一个自底向上的计算过程,需要将每个非底层的两个子16-D0P包围盒合并为一个大的16-D0P包围盒。(2)构建包围盒测试树,生成前线,对前线进行包围盒重叠测试。根据包围盒层次结构,构建BVTT (包围盒测试树),通过对包围盒测试树进行包围盒重叠测试,生成前线,对前线进行包围盒重叠测试,输出存在包围盒重叠的叶节点。生成前线的过程为首先,自顶向下对包围盒测试树中的非叶节点进行包围盒重叠测试,若不存在包围盒重叠,将该非叶节点存入前线;然后,排除存入前线的非叶节点所对应的若干叶节点;最后,将包围盒测试树中未排除的所有叶节点存入前线。当进行第m次碰撞检测时,前线是根据包围盒层次结构,对上一次碰撞检测过程中的前线进行扩展生成的,即对上一次碰撞检测过程中的前线中的非叶节点进行包围盒重叠测试,若存在包围盒重叠,将该非叶节点分解成对应的若干叶节点并存入前线,m为自然数且eN+2 ^m^e (N+1),N为自然数,e为前线重构代数,且为实际经验值,通常取e = 30。如图2所示,采用自顶向下的构建方法构造BVTT,在图2(a)中已经对整个场景构造了一个BVH ;相应地,图2 (b)就是针对图2 (a)场景而构建的一个BVTT。如图2(b)中所示,生成前线的过程为首先,自顶向下对包围盒测试树中由两个包围盒构成的非叶节点(AijA1)、(B1, B1)、(B1, B2)、(B2, B2)、(a, B2)和(b,B2)进行包围盒重叠测试,测试出其中只有(a,B2)不存在包围盒重叠,其余的非叶节点都存在包围盒重叠,因此将(a, B2)存入前线;其次,排除非叶节点(a, B2)所对应的两个叶节点(a, c)和(a, d); 最后,将包围盒测试树中未排除的所有叶节点(a, c)、(a, d)、(b,c)和(b,d)存入前线。因此本实施方式的前线即是存有节点(a, B2)、(a, c)、(a, d)、(b,c)和(b,d)的链表,如图2(b)中的链带。对该五个节点进行包围盒重叠测试,输出存在包围盒重叠的叶节点。(3)对包围盒进行精确碰撞检测。对输出的叶节点对应的两个16-D0P包围盒内的三角形对进行精确碰撞检测。对两个16-D0P包围盒对应的两个三角形,使用元素测试进行精确计算,得到碰撞发生的第一碰撞时间。这个过程中,将两个三角形之间的碰撞检测问题,转化为顶点与三角形的碰撞检测以及边与边的碰撞检测。本实施方式通过对16-D0P包围盒重构以及对BVH整理更新,缩短了碰撞检测的时间,对于支持BVH的碰撞检测方法具有很好的扩展性;通过引入前线的链表结构在处理器间均衡计算负载,提高了处理器的负载均衡度,改善了存储访问模式的规则性,提高了碰撞检测的效率。
权利要求
1.一种基于前线的包围盒碰撞检测方法,包括如下步骤(1)对待检测的三角形网格柔性场景模型中的每个三角形构造对应的包围盒,进而建立所述的三角形网格柔性场景模型的包围盒层次结构;(2)根据所述的包围盒层次结构,构建包围盒测试树,通过对包围盒测试树进行包围盒重叠测试,生成前线,对前线进行包围盒重叠测试,输出存在包围盒重叠的叶节点;所述的前线是一种存有包围盒测试树中节点的链表;(3)对输出的叶节点对应的两个包围盒内的三角形对进行精确碰撞检测。
2.根据权利要求1所述的基于前线的包围盒碰撞检测方法,其特征在于所述的步骤 (2)中,生成前线的过程为首先,自顶向下对包围盒测试树中的非叶节点进行包围盒重叠测试,若不存在包围盒重叠,将该非叶节点存入前线;然后,排除存入前线的非叶节点所对应的若干叶节点;最后,将包围盒测试树中未排除的所有叶节点存入前线。
3.根据权利要求1所述的基于前线的包围盒碰撞检测方法,其特征在于所述的步骤(1)中,当进行第η次碰撞检测时,包围盒层次结构是根据第η次碰撞检测时刻每个三角形的空间位置,对上一次碰撞检测过程中的包围盒层次结构中最底层的包围盒进行重构,进而自底向上对上一次碰撞检测过程中的包围盒层次结构进行整理更新而成的,η为大于1 的自然数。
4.根据权利要求1所述的基于前线的包围盒碰撞检测方法,其特征在于所述的步骤(2)中,当进行第m次碰撞检测时,前线是根据包围盒层次结构,对上一次碰撞检测过程中的前线进行扩展生成的,即对上一次碰撞检测过程中的前线中的非叶节点进行包围盒重叠测试,若存在包围盒重叠,将该非叶节点分解成对应的若干叶节点并存入前线,m为自然数且eN+2 ^m^e (N+1),N为自然数,e为前线重构代数,且为实际经验值。
5.根据权利要求1、2、3或4所述的基于前线的包围盒碰撞检测方法,其特征在于所述的包围盒为16-D0P包围盒。
全文摘要
本发明公开了一种基于前线的包围盒碰撞检测方法,包括(1)构建包围盒层次结构;(2)构建包围盒测试树,生成前线,对前线进行包围盒重叠测试;(3)对包围盒进行精确碰撞检测。本发明通过对包围盒重构以及对BVH整理更新,缩短了碰撞检测的时间,对于支持BVH的碰撞检测方法具有很好的扩展性;通过引入前线的链表结构在处理器间均衡计算负载,提高了处理器的负载均衡度,改善了存储访问模式的规则性,提高了碰撞检测的效率,尤其适应用于机器人运动路径规划、物理仿真、视频游戏等技术领域中。
文档编号G06F11/00GK102193837SQ20111010415
公开日2011年9月21日 申请日期2011年4月26日 优先权日2011年4月26日
发明者唐敏, 杜鹏, 童若锋, 赵杰伊 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1