一种三维碰撞检测方法

文档序号:6365535阅读:336来源:国知局
专利名称:一种三维碰撞检测方法
技术领域
本发明涉及计算机数据处理领域,尤其涉及一种三维碰撞检测方法。
背景技术
碰撞检测是计算机游戏中需要解决的问题之一,它的核心任务是检测游戏场景中两个或多个物体彼此之间是否发生接触或进入。当前,三维几何模型越来越复杂,画面效果越来越逼真,同时人们对交互的实时性、场景的真实性的期望越来越高,这些都对碰撞检测方法提出了较高的要求。
近二十多年来,研究人员在碰撞检测领域中做了相当多有意的工作,提出了一些较成熟的算法,并开发了相应的软件。研究人员根据不同的研究对象,采用了不同的研究方法,由此提出多种多样的碰撞检测算法。下面先对碰撞检测算法从时间和空间的角度对它们做一个划分(I)基于时间域,可以分为离散和连续的碰撞检测算法。离散碰撞检测算法是指在每一离散的时间点上进行碰撞检测,其优势在于检测速度上,但可能会漏测本该发生的碰撞或者发生物体互相进入的情形;连续碰撞检测算法是指在连续的时间间隔内进行碰撞检测,它的正确性有保证,但计算开销过大,容易在速度方面拖后腿,致使实时性得不到很好满足。(2)基于空间域,可以分为基于物体空间和图像空间的碰撞检测算法。基于物体空间的碰撞检测算法又可以进一步划分为采用一般表示模型的碰撞检测算法和采用空间结构的碰撞检测算法,其中采用空间结构的碰撞检测算法又分空间剖分法(spacedecomposition)和层次包围体树法(hierarchical bounding volume trees),这两类方法都是通过尽可能减少进行精确求交的物体对或基本几何元素的个数来提高算法效率的。不同的是,空间剖分法(如BSP树)采用对整个场景的层次剖分技术来实现,而层次包围体树法则是对场景中每个物体建构合理的层次包围体树来实现。目前现有的专利文献中关于碰撞检测方法很多,其中一种在服务器端实现三维游戏碰撞检测的方法,主要包括以下步骤在三维游戏场景中的物体外面预置一个包围体,所述包围体包围该物体或者物体的主要部分,而且包围体采用的是球状包围体;在游戏玩家的外面预置一个球状包围体,所述包围体包围玩家或者玩家的主要部分,表示包围体的面的数值存储于游戏地图文件中;当玩家移动要与物体进行碰撞时,对玩家包围体的面与物体的包围体的面进行碰撞检测。具体参见图I。针对目前的现有技术,其存在的缺点是采用包围球来作为物体和玩家的包围体,适合于长宽高相差不多的物体,而对与长条形的物体,包围球的紧密型不好,这会让游戏不逼真,效果很差,这会出现实际没有碰撞而程序却检测到了碰撞的情况。碰撞检测算法的并行性不足,没有充分挖掘检测算法中可以采用流水线技术进行加速处理。

发明内容
本发明的目的是为了克服现有技术的缺陷,提供一种三维碰撞检测方法。—种三维碰撞检测方法,需要先建立场景的一个数据表示结构,即场景树;场景树是由平衡包围树来实现,对游戏场景中的所有物体进行自上而下的构建AABB平衡包围树;包围树中每一个结点是一个包围盒;其特征在于,a.首先建立模型的包围盒,作为包围盒树的根结点;b.其次按照一定的规则将模型分成两个或者多个部分,建立每个部分的包围盒和相应的结点,将这些新结点作为根结点的子结点;然后按照步骤b的方法分裂与每个子结点对应的模型,递归地建立包围盒树。优选的,本发明采用分治策略自上而下的方法构建游戏场景的包围盒树,进行碰撞检测,引进流水线技术对检测进行加速。
在流水线技术中,问题被分成一系列必须是一个接一个完成的任务,每个任务由独立的进程或处理器执行,采用下列3种计算类型,用流水线方法进行加速(I)执行整个问题的多个实例;(2)必须处理一系列的数据项,而每个数据项需要多次操作;(3)进程在完成自己的所有内部操作之前能够把下一个进程启动所需的信息向前传送;将上述三种情况分别定义为类型I、类型2、类型3。本发明采用AABB平衡包围树的构建过程如下(I)对每个物体建立其整体的包围盒,将其作为该物体平衡包围盒树的根结点,此结点包含了组成此物体的所有多边形;(2)由于使用的是AABB包围盒,采用基于分裂平面的方法将根结点的包围盒划分成左右两个子结点;分裂平面的选择是使包围盒树平衡的关键,首先确定分裂轴,使用最长轴方法,SP选择的方向轴是包围盒在此方向上最长的;而后确定分裂点,选择根结点集合中所有基本几何元素的中心点在分裂轴上的投影,以最小点和最大点为两个中心点,按距离将所有投影点分为两组;将距两中心点等距的点归入含投影点少的一组。具体的三维碰撞检测方法的流程如下St印I :输入物体A和B,分别建立A,B的平衡包围盒树,转Step2 ;Step2 :将(a0, b0)加入到任务树节点存储队列LiveSet中,转Step3 ;St印3 :判断LiveSet是否为空,若不为空则转St印4,否则转St印11 ;Step4 :从 LiveSet 中弹出(a0, b0),转 Step5 ;Step5 :判断(a0, b0)是否相交,若不相交则转Step3,否则转Step6 ;St印6 :判断a0,b0的结点状态,a0,b0均为叶子结点,则转St印7 ;a0,b0均不是叶子结点转Step8 ;a0是叶子结点,b0不是则转Step9 ;a0不是叶子结点b0是则转SteplO ;St印7 :用基本几何元素对a0,b0进行碰撞检测,若碰撞则返回True,否则返回False ;Step8 :将(al,bl),(al,b2),(a2,bl),(a2,b2)加入到 LiveSet 中,转 Step3 ;Step9 :将(a0,bl),(a0,b2)力口入到 LiveSet 中,转 Step3 ;SteplO :将(al,b0),(a2,b0)加入到 LiveSet 中,转 Step3 ;Stepll :返回 False,结束。本发明技术方案带来的有益效果1)包围体的选取有很多种,本发明选用AABB包围盒作为物体的包围体具有简单快速和检测精确的特点;
2)采用多级并行处理加速技术,不仅在单处理器而且在多处理器机器中都有很好的加速作用,引入多线程节省资源,并且能够根据状态智能地调整线程数量使得资源利效
率最高。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。图I是现有技术中碰撞检测流程图;图2是本发明中碰撞检测系统流程图;
图3是本发明中流水化进程图;图4是本发明中碰撞检测过程中简单任务树图;图5是本发明碰撞检测流程图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明的目的提供一种基于AABB(Axis-Aligned Bounding Boxes)包围体的三维碰撞检测方法,采用分治策略自上而下的方法构建游戏场景的包围盒树,进行碰撞检测,弓丨进流水线技术对检测进行加速。假设三维空间中有N个运动模型,它们随着时间改变位置和状态,设三维几何空间为R,用三维几何坐标系统Fw表示,在Fw中用FA表示模型A所占的集合,显然FA是Fw的子集。那么Fw随着时间的变化构成了一个四维空间坐标系统Cw,模型A沿着一定轨迹运动就形成了 Cw的子集,该子集表示为CA。碰撞检测就是判断Cl n C2 η ·.. n Cn ^ φ是否成立。三维物体之间的碰撞检测通常需要先建立场景的一个数据表示结构,即场景树。在本发明中场景树是由平衡包围树来实现,对游戏场景中的所有物体进行自上而下的构建平衡包围树。包围树中每一个结点是一个包围盒,采用AABB包围盒具有简单快速等优点。
对游戏玩家和物体之间的碰撞检测以及物体与物体之间的碰撞检测,其本质上是对场景中树的一种遍历过程。检测过程中的可重复性使得可以采用流水线技术对检测过程进行加速处理,系统图参见图2 包围盒树可以按照自下而上的方式或者自上而下的方式构造,这要取决于包围盒的种类和算法的意图。大多数层次结构都采用自上而下的方式,即首先建立模型的包围盒,作为包围盒树的根结点;其次按照一定的规则将模型分成两个或者多个部分,建立每个部分的包围盒和相应的结点,将这些新结点作为根结点的子结点;然后按照第二步的方法分裂与每个子结点对应的模型,递归地建立包围盒树。
对于二叉树而言,当且仅当包围盒树中的每一个叶结点对应于S的一个单元素子集,即只包含一个基本几何元素时则称一棵包围盒树为完全的。由以上描述可知,包围盒树最多有2n-l个结点,其中有η个叶结点,并且要求两个子包围盒内的多边形个数大致相等;一棵完全的包围盒树的高度至少为Iogn,此时称为树是平衡的。分治策略的特点是将一个问题分为与原来的较大问题有相同形式的子问题,进一步分为较小的问题,通常是通过递归的方法,直到不需要再分解为止。接着就完成这些简单的任务并把结果合并,然后按更大的任务继续合并,直到获得最后的结果。分治策略将一个任务在每一步分为Μ(Μ > 2)个部分,称为M路分治,通常有二叉树(Μ = 2)和四叉树(Μ =4)。在流水线技术中,问题被分成一系列必须是一个接一个完成的任务,每个任务由独立的进程或处理器执行,如图3所示假设一个问题能够被分解成一系列的顺序任务,那么采用下列3种计算类型,可 以用流水线方法进行加速(I)执行整个问题的多个实例。(2)必须处理一系列的数据项,而每个数据项需要多次操作。(3)进程在完成自己的所有内部操作之前能够把下一个进程启动所需的信息向前传送。将上述三种情况分别定义为类型I、类型2、类型3。应用上述所介绍的理论提出了一种并行碰撞检测算法,本算法主要采用分治策略建立平衡包围盒树,使用的是两路分治即二叉树。其数据结构在预处理阶段一次性建好。由于建立的包围盒树大致平衡,故并行遍历包围盒树可极大提高碰撞检测的效率。包围盒树的遍历实质是一个基于分治或树搜索的过程,将此过程实行并行化;应用流水线技术将整个环境中所有物体的碰撞检测划分为m个任务,每个任务由P个进程执行;每个进程采用多线程进行处理。从而使碰撞检测得到加速。包围盒间相交测试的速度直接影响到碰撞检测的速度。AABB包围盒间的相交测试是所有包围盒类型中最简单、速度最快的一种。由于AABB包围盒可以由3对与坐标轴正交的平行平面对来定义,故AABB包围盒间的相交测试可以通过它在X、Y、Z三个坐标轴上的投影区间之间的重叠测试来完成,如果两AABB包围盒在任何一个坐标轴上的投影区间是不重叠的,则可判定它们不相交;只有当它们在3个坐标轴上的投影区间都重叠,它们才是相交的。因此,AABB包围盒间的相交测试最多只需要6次比较运算,所以本发明使用此包围盒。平衡包围树的构建过程如下(I)对每个物体建立其整体的包围盒,将其作为该物体平衡包围盒树的根结点,此结点包含了组成此物体的所有多边形。(2)由于使用的是AABB包围盒,采用基于分裂平面的方法将根结点的包围盒划分成左右两个子结点。分裂平面的选择是使包围盒树平衡的关键,首先确定分裂轴,使用最长轴方法,即选择的方向轴是包围盒在此方向上最长的;而后确定分裂点,选择根结点集合中所有基本几何元素的中心点在分裂轴上的投影,以最小点和最大点为两个中心点,按距离将所有投影点分为两组。将距两中心点等距的点归入含投影点少的一组。对每个结点采用如上的方法递归,建立每个物体的包围盒树。适当的递归终止条件采用如下简单的线性判别函数p(x)=ATB(I)式中A= (al, a2, , an) ,B= (bl, b2, , bn) ;bl, b2, , bn 为递归终止的各种因素,常取为包围盒树要求的高度,叶子结点中要求所含基本几何元素的最多数;al, a2,· · ·, an分别为与bl,b2,· · ·,bn对应的加权值。将遍历两个物体的平衡包围盒树的过程定义成一棵任务树的遍历。简单地表示如图4所示,将任务树的结点采用队列(LiveSet)存储。进行碰撞检测的流程可参见图5,具体如下Stepl :输入物体A和B,分别建立A,B的平衡包围盒树,转St印2 ;Step2 :将(a0, bO)加入到任务树节点存储队列LiveSet中,转Step3 ;St印3 :判断LiveSet是否为空,若不为空则转St印4,否则转St印11 ;Step4 :从 LiveSet 中弹出(a0, bO),转 Step5 ;Step5 :判断(a0, bO)是否相交,若不相交则转Step3,否则转Step6 ;St印6 :判断a0,b0的结点状态,a0,bO均为叶子结点,则转St印7 ;a0,b0均不是叶子结点转Step8 ;a0是叶子结点,bO不是则转Step9 ;a0不是叶子结点bO是则转SteplO ;St印7 :用基本几何元素对a0,bO进行碰撞检测,若碰撞则返回True,否则返回False ;Step8 :将(al, bl),(al, b2),(a2, bl),(a2, b2)加入到 LiveSet 中,转 Step3 ;Step9 :将(aO, bl),(aO, b2)加入到 LiveSet 中,转 Step3 ;SteplO :将(al, bO),(a2, bO)加入到 LiveSet 中,转 Step3 ;Stepll :返回 False,结束。本发明中一个重要的并行化处理是在上述的Step4中,将LiveSet中所有的任务结点同时弹出,多个任务结点间进行并行的碰撞检测。本发明的另一个并行化加速是利用流水线技术进行加速处理。将采用前面提到的类型1,其流水线可以用时空图来说明。假设每一个进程完成的时间是相同的。每一个时间段就是一个流水线周期。因此问题的每一个实例都需要经历6个顺序进程p0,pl,p2,p3,p4和p5。经过起始阶段的阶梯效果之后,每一个流水线周期就可以完成问题的一个实例。有P个进程构成的流水线完成m个问题的执行需要(m+p-1)个流水线周期,执行每个问题的平均周期数为(m+p-l)/m。当m很大时,每个问题实例趋近于一个流水线周期。在任何情况下,流水线过了开始的(P-I)个周期(流水线延迟)后的每个周期将完成问题的一个实例。其加速比为P I。如有η个物体,则形成η*η棵任务树,由所有物体的平衡包围盒树通过两两组成多棵任务树,将每棵任务树的遍历看作一个任务,然后将每个任务划分成P个进程,其中P不宜大于32。进程数P的确定可以采取以下方法方法采用的流水线技术属于类型I,每个任务结点的执行算法是相同的,所用的时间定为一个流水线周期。
由前面规定的bl为平衡树的高度,则每棵任务树的高度也为bl,所以结点树为(4bl-l)/3。如果将P的个数定为任务结点的个数,则总的计算执行时间为ttotal ttotal = (tcomp+tconm) (m+p-1)。其中为任务实例数;p为进程数;t_p和分别为计算时间和通信时间。 由于每个进程占用的资源太多,应选择合适的进程数P。考虑每个流水线周期处理d 个结点,贝1J进程数 P’ = p/d, tcomp = d,且 ttotal = (d+te_) (m+p’ -I)。所以 d 和 p 的选择需要找到平衡点才能提高效率。d个结点可以应用线程并行技术。一个进程中可以同时执行的线程数是由处理器的操作系统决定的。提出P以及对应总时间量的计算公式如下
权利要求
1.一种三维碰撞检测方法,需要先建立场景的一个数据表示结构,即场景树;场景树是由平衡包围树来实现,对游戏场景中的所有物体进行自上而下的构建AABB平衡包围树;包围树中每一个结点是一个包围盒;其特征在于,a.首先建立模型的包围盒,作为包围盒树的根结点;b.其次按照一定的规则将模型分成两个或者多个部分,建立每个部分的包围盒和相应的结点,将这些新结点作为根结点的子结点;然后按照步骤b的方法分裂与每个子结点对应的模型,递归地建立包围盒树。
2.如权利要求I所述的方法,其特征在于,采用分治策略自上而下的方法构建游戏场景的包围盒树,进行碰撞检测,引进流水线技术对检测进行加速。
3.如权利要求I或2所述的方法,其特征在于,在流水线技术中,问题被分成一系列必须是一个接一个完成的任务,每个任务由独立的进程或处理器执行,采用下列3种计算类型,用流水线方法进行加速 (1)执行整个问题的多个实例; (2)必须处理一系列的数据项,而每个数据项需要多次操作; (3)进程在完成自己的所有内部操作之前能够把下一个进程启动所需的信息向前传送; 将上述三种情况分别定义为类型I、类型2、类型3。
4.如权利要求I所述的方法,其特征在于,AABB平衡包围树的构建过程如下 (1)对每个物体建立其整体的包围盒,将其作为该物体平衡包围盒树的根结点,此结点包含了组成此物体的所有多边形; (2)由于使用的是AABB包围盒,采用基于分裂平面的方法将根结点的包围盒划分成左右两个子结点; 分裂平面的选择是使包围盒树平衡的关键,首先确定分裂轴,使用最长轴方法,即选择的方向轴是包围盒在此方向上最长的;而后确定分裂点,选择根结点集合中所有基本几何元素的中心点在分裂轴上的投影,以最小点和最大点为两个中心点,按距离将所有投影点分为两组;将距两中心点等距的点归入含投影点少的一组。
5.如权利要求I所述的方法,其特征在于,具体的三维碰撞检测方法的流程如下Stepl :输入物体A和B,分别建立A,B的平衡包围盒树,转St印2 ; Step2 :将(aO, bO)加入到任务树节点存储队列LiveSet中,转Step3 ; St印3 :判断LiveSet是否为空,若不为空则转St印4,否则转St印11 ;Step4 :从 LiveSet 中弹出(aO, bO),转 Step5 ; Step5 :判断(aO, bO)是否相交,若不相交则转Step3,否则转Step6 ; St印6 :判断aO,bO的结点状态,aO,bO均为叶子结点,则转St印7 ;a0, bO均不是叶子结点转Step8 ;a0是叶子结点,bO不是则转Step9 ;a0不是叶子结点bO是则转SteplO ;Step7 :用基本几何兀素对aO, bO进行碰撞检测,若碰撞则返回True,否则返回False ;St印8 :将(al, bl),(al, b2),(a2, bl),(a2, b2)加入到 LiveSet 中,转 Step3 ; Step9 :将(aO, bl),(aO, b2)加入到 LiveSet 中,转 Step3 ;SteplO :将(al, bO),(a2, bO)加入到 LiveSet 中,转 Step3 ; Stepll :返回 False,结束。
全文摘要
本发明公开了一种三维碰撞检测方法。采用分治策略自上而下的方法构建游戏场景的包围盒树,进行碰撞检测,引进流水线技术对检测进行加速。采用分治策略建立平衡包围盒树,使用的是两路分治即二叉树。其数据结构在预处理阶段一次性建好。由于建立的包围盒树大致平衡,故并行遍历包围盒树可极大提高碰撞检测的效率。采用多级并行处理加速技术,不仅在单处理器而且在多处理器机器中都有很好的加速作用,引入多线程节省资源,并且能够根据状态智能地调整线程数量使得资源利效率最高。
文档编号G06F9/38GK102663825SQ201210049318
公开日2012年9月12日 申请日期2012年2月29日 优先权日2012年2月29日
发明者曾金龙, 李俊, 林谋广 申请人:中山大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1