CN101593366A - 一种基于平衡二叉树的大规模虚拟场景碰撞检测方法 - Google Patents

一种基于平衡二叉树的大规模虚拟场景碰撞检测方法 Download PDF

Info

Publication number
CN101593366A
CN101593366A CNA2009100867190A CN200910086719A CN101593366A CN 101593366 A CN101593366 A CN 101593366A CN A2009100867190 A CNA2009100867190 A CN A2009100867190A CN 200910086719 A CN200910086719 A CN 200910086719A CN 101593366 A CN101593366 A CN 101593366A
Authority
CN
China
Prior art keywords
node
tree
bounding box
scene
branch
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2009100867190A
Other languages
English (en)
Inventor
何兵
王洋子豪
赵沁平
郝爱民
王莉莉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beihang University
Original Assignee
Beihang University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beihang University filed Critical Beihang University
Priority to CNA2009100867190A priority Critical patent/CN101593366A/zh
Publication of CN101593366A publication Critical patent/CN101593366A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Image Analysis (AREA)

Abstract

本发明涉及一种基于平衡二叉树的大规模虚拟场景碰撞检测方法。针对大规模虚拟场景中物体数量多、种类复杂的特点,本发明在传统的层次包围盒方法对动态场景实时碰撞检测有不足的基础上,采用扩展的平衡二叉树改进层次包围盒树结构,加快了多物体碰撞检测的速度,并且降低了由于场景变化而引起树重构的时间复杂度;本发明根据层次结构采用不同包围盒,将包围盒的简单性与紧密性结合,并改进碰撞方法,提高了碰撞检测的精确性。具体处理流程见摘要附图。

Description

一种基于平衡二叉树的大规模虚拟场景碰撞检测方法
技术领域
本发明涉及一种基于平衡二叉树的大规模虚拟场景碰撞检测方法。属于虚拟现实技术研究领域。
背景技术
物体在空间中发生接触是自然界中的普遍现象,碰撞检测的任务就是确定两个或多个物体间是否发生接触或穿透。碰撞检测(Collision Detection,CD)也称为干涉检测或者接触检测,是计算机动画、系统仿真、计算机图形学、计算几何、机器人学、CAD/CAM等研究领域的经典问题。在虚拟环境中,由于用户的交互行为和物体的运动,物体间可能经常发生碰撞,此时为了保持环境的真实性,需要及时检测到这些碰撞,并计算相应的碰撞反应,更新绘制场景。
目前国内外对碰撞检测的研究有以下五个方面的意义:虚拟场景中的物体模型越来越复杂;物体要求具有柔性以及可变形等特性;对每个碰撞需要响应;在仿真中对实时性和真实性的要求越来越高;现有的碰撞检测算法无法满足要求。影响碰撞检测的要素包括:实时性,精确度,模型类别,检测类别,场景特征等。
主流的碰撞检测方法主要包括:Hahn【参考文献Hahn J K,Realistic animation of rigidbodies[J].Computer Graphics,1988,22(4):299~308】采用层次包围盒技术来加速多面体场景的碰撞检测。其基本思想是:利用体积略大而形状简单的包围盒把复杂的几何对象包裹起来,然后再进行碰撞检测时首先进行包围盒之间的相交测试。根据包围盒的不同,包括很多种类:层次包围球树【参考文献Hubbard,P.M.,Approximating Polyhedra withSpheres for Time Critical Collision Detection[J].ACM Transactions on Graphics,1996,15(3).179-210.】、AABB层次树(Aligned Axis Bounding Box)【参考文献Bergen VD,Efficient Collision Detection of Complex Deformable Models using AABB Trees[J].Journal of Graphics Tools.1997,2(4).1-13.】、OBB层次树(Oriented Bounding Box)【参考文献Gottschalk S,Lin,M.C.and Manocha.D,OBB Tree:a Hierarchicai Structurefor Rapid Interference Detection[C].In SIGGRAPH 96 Conference Proceedings,AnnualConference Series,ACM SIGGRAPH,New Orleans,USA,Aug.1996,171-180.】、k-Dop层次树(Discrete Orientation Polytope)、凸壳层次树以及混合层次树等。总的说来,根据包围盒的不同,碰撞判断的精确程度也有所差异。通常的优化方法,需要根据给出模型的结构,构建一棵层次包围盒树,从而提高碰撞检测的效率。
上述包围盒法的主要缺陷在于,对几何信息明确的模型不太适用,另外包围盒的选取要根据具体需求而定,通用性差。针对主流的碰撞检测方法存在的上述问题,本发明在借鉴层次包围盒树思想【参考文献Miguel A,Otaduy,Balanced Hierarchies for CollisionDetection between Fracturing Objects[C].IEEE Virtual Reality Conference 2007 March10-14,Charlotte,North Carolina,USA】的基础上,构建了平衡二叉树。其核心思想是以单个物体作为场景碰撞树的叶结点,组织成一棵平衡二叉树,二叉树中各父结点包含着其左右孩子的包围盒,并构成新的包围盒,其意义相当于将场景中的物体按照某种方式进行区域划分,并以层次逐步细分。随着物体运动、场景变化,平衡二叉树能够以更高效的方式更新。实施方案中,层次结构采用自顶向下的方式,即首先建立模型的包围盒,作为包围体树的根节点;然后按照一定的规则将模型分成两个或者多个部分,建立每个部分的包围盒和相应的节点,将这些新节点作为根节点的子节点;此后不断依据上一步的方法重复分裂每个子节点对应的模型,递归地建立起层次包围体树。
本发明经过国内外专利文献和非专利文献的检索尚未发现采用相同策略和流程的大规模虚拟场景碰撞检测方法。
发明内容
本发明要解决的技术问题是:克服了现有技术的不足,提供一种可以适用于大规模场景多物体的碰撞检测方法,并且保证其实时性。
本发明采用的技术方案为:基于平衡二叉树的大规模虚拟场景碰撞检测方法,具体通过以下步骤实现:
(1)对一个复杂场景,其中包含物体集合{Pi},为每个物体构建一个OBB层次包围盒结构,然后组织成一棵平衡二叉包围盒树;在平衡二叉包围盒树建立后,每个叶结点对应一个场景中的物体,每个非叶结点包含一组物体;平衡二叉包围盒树的叶结点采用物体的OBB包围盒而非叶结点采用AABB包围盒,包含其下一组物体,具体步骤如下:
a.采用自顶向下的层次包围盒树空间剖分的思想建立一个包含所有物体信息的表,对所有物体,根据虚拟空间的分布坐标范围和物体的位置坐标按照二分法查找出表中位置,然后进行表插入操作,本步骤操作的时间复杂度为0(nlogn);该表是建树的基础,便于以后的树的维护;
b.采用自顶向下的二分递归建树法,利用排好序的表构造出整棵扩展平衡二叉包围盒树;每个物体的包围盒位于叶结点,这样一个包含n个物体的树,实际上具有2n-1个结点,二分建树时间复杂度为0(n)。
(2)遍历平衡二叉包围盒树,采用AABB碰撞检测方法进行碰撞判定,具体步骤如下:
a.获得根结点的两个子结点A、B,进入步骤c;
b.如果对应A、B两结点的包围盒发生碰撞,则执行步骤c;否则说明碰撞未发生,停止该分支检测;
c.对发生碰撞的情况,分以下两种情况处理:
情况1:如A、B两结点是否均为叶结点,判断A、B是否为同一包围盒,是则表示A、B为同一物体,此时过滤碰撞,否则判断碰撞发生并停止该分支检测;
情况2:若A、B中至少有一个为非叶结点,则执行步骤d;
d.如果发生碰撞的A、B结点中至少有一个为非叶结点,则分以下两种情况处理:
情况1:若发生碰撞的A、B节点为同一节点,则新增以下3项分支并进入步骤e,这些分支包括A的左子树结点与A的左子树结点、A的左子树结点与A的右子树结点、A的右子树结点与A的右子树结点;
情况2:若发生碰撞的A、B节点为不同的节点,此时由于A、B中至少有一个为非叶结点,故可分以下两种情况分别处理:
若A、B均为非叶结点,则新增以下4项分支并进入步骤e,这些分支包括A的左子树结点与B的左子树结点、A的左子树结点与B的右子树结点、A的右子树结点与B的左子树结点、A的右子树结点与B的右子树结点;
若A、B中只有一个非叶结点,不失一般性,设A为非叶结点,B为叶结点,则新增以下2项分支并进入步骤e,这些分支包括A的左子树结点与B结点、A的右子树结点与B结点。
e.针对每个步骤d中新增的检测分支,迭代步骤b的操作。
(3)在场景中增加、删除物体或场景中的物体发生位置变化都可能引起场景结构的局部变化,,平衡二叉包围盒树不断更新以维持平衡;为确保更新过程的效率,本发明对普通的平衡二叉树进行扩展;此时根据每个包围盒运动,以及场景物体数量不断变化,通过更新场景算法维护平衡二叉包围盒树结构。
a.根据增加物体/删除物体/修改物体位置等情况,修改场景树信息,其中删除物体的过程为增加物体的逆过程,而修改物体位置的过程为删除物体然后增加物体的组合过程。对增加物体,需设定其包围盒并在物体表中增加一条记录,然后在树中找到对应的位置,增加叶结点和一个用于连接的非叶结点。对删除物体,需在物体表中删除相应记录,然后在树中找到对应的位置,删除叶结点和用于连接的非叶结点。
b.自底向上地更新增加/删除结点这一分枝上的包围盒,结点的深度h(a),最大孩子值m(a)和平衡因子w(a)。每更新一个结点,判断该分支w(a)的值,是否非平衡。如果非平衡则执行步骤c;否则,分支更新完毕,执行步骤d。
c.对当前的子树进行平衡化操作,更新子树的深度、包围盒等信息,然后执行步骤b。
d.将新增物体信息加入场景物体管理列表。
本发明与现有技术相比的优点在于:
(1)在大规模复杂虚拟场景中,需要动态添加、删除物体物体,同时物体本身也在运动,以往的碰撞检测方法所构造的二叉树在上述情况下易于退化,即某些节点仅存在一个分支,从而部分丧失树形结构的优势。为克服这一缺陷,本发明对二叉树结构进行了必要调整,使之保持一种平衡状态,即利用平衡二叉树结构对虚拟场景及其中物体的层次包围盒进行优化。以场景中的每一个物体作为树的叶结点,每个父结点的包围盒包含着其左右孩子的包围盒。针对树结构退化的问题,本发明给出了树形结构平衡化的方法。其意义相当于,将场景中的物体按照场景坐标范围和物体位置进行区域平衡划分,并按层次关系逐步细分,从而为提高多物体碰撞检测的实时性奠定基础。
(2)本发明为了提高碰撞检测的精确性,对平衡二叉树结构进行了扩展,对叶结点采用OBB包围盒而非叶结点采用AABB包围盒,并采用逐步排除的思想优化了碰撞检测方法,这样在兼顾效率的基础上,提高了碰撞检测的精确性。
(3)本发明针对平衡二叉包围盒树提出了一套高效的更新策略,任意增加减少物体,其计算复杂度均不超过0(nlogn)。
综上所述,本发明提出的适用于大规模场景多物体的碰撞检测方法不仅保证能够检测到多物体间的碰撞,而且解决了传统方法中碰撞树的退化问题,并提高了碰撞检测的实时性,可应用于大规模虚拟场景中的碰撞检测及柔性物体变形的仿真。
附图说明
图1为本发明方法构建场景碰撞树型结构的过程;
图2为大规模场景平衡二叉树碰撞检测算法流程;
图3a和图3b为树叶结点与非叶节点碰撞检测示意图;
图4为改善的碰撞算法求交方式示意图;
图5为管理场景树增加新的结点;
图6a和图6b为管理场景树更新树的平衡;
图7a和图7b为本发明方法三维场景仿真效果图;
图8为本发明方法大数量物体场景实时碰撞效果图。
具体实施方式
下面结合附图及具体实施方式对本发明进一步详细说明。
(1)本方法为每个物体构建一个OBB层次树,然后组织成一棵平衡二叉包围盒树。
在建树之前,需构建树结点。树结点包括包围盒,指向左、右孩子的指针,指向父结点指针等。IsLeaf作为是否叶结点的标志,0表示非叶结点。Height记录当前的层数,MaxSon表示孩子的最大深度,用于更新平衡树因子weight。根据平衡二叉树的性质,稳定的平衡二叉树w(a)取值只有1,0,-1。每当场景树做一次增加或删除结点后,可能会造成树的不平衡,增加则w(a)加1,删除则w(a)减1,因此w(a)可能取值为2,-2,此时要进行平衡二叉树的调整。
在初始化复杂场景时,为了构建一棵包含所有物体的树,通常采用自顶向下或自底向上两种策略。层次包围盒树采用空间剖分的思想,一般的静态场景采用自顶向下方式。
本方法采用的扩展平衡二叉树,每个物体的包围盒实际上位于叶结点,这样一个包含n个物体的树,实际上具有2n-1个结点;并且,树形要经常变化,因此建树之前,首先建立一个包含物体所有信息的表,对每个物体,根据虚拟空间坐标范围及物体位置坐标按照二分查找出表中位置,然后进行表插入操作,时间复杂度为0(nlogn),该表是建树的基础,便于以后的树的维护。然后采用自顶向下的二分递归建树法,利用排好序的表构造出整棵平衡二叉树。二分建树时间复杂度0(n)。所建的平衡二叉树如图1所示。
(2)在平衡二叉树建立后,每个叶结点对应一个场景中的物体,每个非叶结点包含一组物体,各结点在空间中的分布范围由该结点的包围盒表示,叶结点采用OBB包围盒,非叶结点采用AABB包围盒。虚拟场景中物体间的碰撞检测流程如图2所示,分为以下几个步骤:
a.构造一个需进行碰撞检测的分支对列表,初始化为空列表。
b.获得根结点的两个子结点A、B,形成分支对(A、B),添加到碰撞检测的分支对列表,进入步骤c;
c.遍历碰撞检测的分支对列表,对每个分支对(A、B)执行步骤d,如果分支对列表已空,则结束碰撞检测。
d.如果对应A、B两结点的包围盒发生碰撞,则执行步骤e;否则说明碰撞未发生,从碰撞检测的分支对列表删除分支对(A、B),然后进行如下处理:如果A节点为非叶结点,则在碰撞检测的分支对列表中添加分支对(A的左子树节点、A的右子树节点),如果B节点为非叶结点,则在碰撞检测的分支对列表中添加分支对(B的左子树节点、B的右子树节点),返回步骤c;
e.对A、B两结点的包围盒发生碰撞的情况,分以下两种情况处理:
情况1:如A、B两结点是否均为叶结点,判断A、B是否为同一包围盒,是则表示A、B为同一物体,此时判断未发生碰撞,否则判断发生碰撞并记录。上述工作完成后,从碰撞检测的分支对列表删除分支对(A、B),返回步骤c;
情况2:若A、B中至少有一个为非叶结点,则执行步骤f;
f.如果发生碰撞的A、B结点中至少有一个为非叶结点,则分以下两种情况处理:
情况1:若发生碰撞的A、B节点为同一节点,则新增以下3项分支对并进入步骤g,这些分支对包括A的左子树结点与A的左子树结点、A的左子树结点与A的右子树结点、A的右子树结点与A的右子树结点;
情况2:若发生碰撞的A、B节点为不同的节点,此时由于A、B中至少有一个为非叶结点,故可分以下两种情况分别处理:
若A、B均为非叶结点,则新增以下4项分支对并进入步骤g,这些分支对包括A的左子树结点与B的左子树结点、A的左子树结点与B的右子树结点、A的右子树结点与B的左子树结点、A的右子树结点与B的右子树结点;
若A、B中只有一个非叶结点,不失一般性,设A为非叶结点,B为叶结点,则新增以下2项分支对并进入步骤g,这些分支对包括A的左子树结点与B结点、A的右子树结点与B结点;
g.将步骤f中新增的检测分支对添加到碰撞检测的分支对列表,同时从碰撞检测的分支对列表删除步骤f中已处理的分支对(A、B),返回步骤c。
在上述流程中,根据包围盒叶节点与非叶节点的不同,分别采用AABB与OBB的碰撞检测方法。AABB的碰撞检测方法在相交测试、更新速度方面效率高,适用于多物体运动的大规模环境。而OBB的碰撞检测方法适合处理物体的旋转变化。碰撞树中结点的碰撞根据包围盒类型的差别,采用不同的算法。非叶结点间的碰撞检测采用传统的AABB方法。而叶结点直接代表物体的包围盒,因此为了精确性方面的考虑采用改进的OBB方法。这样在兼顾效率的基础上提高了碰撞的精确性。如图3(a)所示为OBB与AABB碰撞检测,图3(b)所示为AABB碰撞检测。
传统OBB方法为了避免线面求交而采用分离轴理论,总共求交次数15次。但根据大规模场景需要,该方法有两点缺陷:首先,每次求交,若相交则要继续检测,15次全部相交则说明包围盒交叠。这样的方法更适用于排除不碰撞的情况;其次,传统OBB方法在发生碰撞时,不返回碰撞点的信息,而在虚拟场景中,需要获得碰撞点信息为随后的碰撞响应处理服务。
本发明采用了直观的线面求交法,虽然总的判断次数增多,但通过使用AABB检测,可确保检测出可能发生的碰撞,并改善求交过程,迅速排除线面碰不上的情况,并返回碰撞交点,具体做法如下:
假设包围盒A、B,对A的棱与B的面进行求交。首先将A棱分为3组,B的面分为3组,这样保证每组都有相同的法向量。设A的一条棱L,L1,L2为其两端点。B的一个面π,包含点V0,V1,V2,V3。设X为平面上任一点,平面方程π:n·X+d=0,其中n表示平面法向量,d表示距离。
n = ( V 1 - V 0 ) × ( V 2 - V 0 ) d = - n · V 0
如图4(1),当棱端点位于平面同一侧,必然不发生碰撞,这样可以排除大部分求交测试。此时利用判别式如下:
D=(N·L1+d)×(N·L2+d)
若D>0说明L1,L2在平面一侧,与π未相交,否则需要求交点。
设x为直线上任一点,L所在直线方程可表示为:x=(L2-L1)·t+L1,其中t为参数。
面π与L所在平面相交,求解出 t = - d - n · L 1 n · ( L 2 - L 1 ) , 最后把t带入直线方程,得到交点P如下:
x = - d - n · L 1 n · ( L 2 - L 1 ) ( L 2 - L 1 ) + L 1
根据图4(3),需判定交点是否在矩形内,在则返回交点,停止其他棱与面的碰撞检测;否则,继续下一次检测。
(3)在场景中增加、删除物体或场景中的物体发生位置变化都可能引起场景结构的局部变化,此时需通过更新场景算法维护平衡二叉树结构,具体流程如下:
a)增加一个物体P,首先要设定其包围盒并在场景物体表中增加一条记录;然后在树中找到对应的插入到的叶结点位置,增加叶结点和一个用于连接的非叶结点,增加结点的效果如图5所示,对具有n个物体的场景树,时间复杂度为0(logn);
删除结点的过程是增加结点过程的逆过程,对需删除的结点,保留其兄弟子树,删去该节点以及其父节点,并将兄弟子树挂接到原父节点的父节点。对于场景有n个物体的情况,删除结点的时间复杂度均为0(logn)。
如果要修改某个树结点的位置,先进行结点删除,再进行结点增加操作。
由于本发明采用的是平衡二叉树结构,最差的场景树也不会退化为链状结构,体现了本发明方法的优势。
上述更新场景树德操作完成后有可能导致场景树不平衡,因而需自底向上更新高度、最大孩子、平衡因子以及上层结点的包围盒信息,如果树的分支失去平衡,需要对树形做旋转调整。
b.自底向上的更新新增加/删除结点这一枝上的包围盒,结点的深度h(a),最大孩子值m(a)和平衡因子w(a)。每更新一个结点,判断该分支w(a)的值,是否非平衡。如果非平衡则执行步骤c;否则,分支更新完毕,执行步骤d。
c.对当前的子树进行平衡化操作,更新子树的深度、包围盒等信息,然后执行步骤b。
树的平衡化过程如下:当平衡二叉树中某个结点a的w(a)=2(或-2)时,说明其左子树(或右子树)深度增加。
对于左孩子的左子树增长,有m(a.lchild)=m(a.rchild)+2且m(a.lchild.lchild)=m(a.lchild.rchild)+1,此时调整树形结构如图6a(1);对于右孩子的右子树增长,有m(a.lchild)=m(a.rchild)-2且m(a.rchild.lchild)=m(a.rchild.rchild)-1,此时调整树形结构如图6a(2)。上述两项操作从包围盒中心的排序来看,调整前与调整后的顺序均为aBbAc,这是平衡二叉树调整的关键。
对于左孩子的右子树、右孩子的左子树增长,采用平衡化策略如图6b(1)(2)所示。与前述相似,此两项操作也保证调整前与调整后的包围盒中心的排序相同,均为aBbCcAd。
平衡化之后要递归的向树根方向更新结点信息,包括最大孩子、包围盒等。通常一次更新时间复杂度为0(logn)。
将本发明方法应用于虚拟场景坦克车辆的碰撞检测,场景中一共包含5000辆坦克模型,试验中,坦克在随机获得速度大小和方向后向各个方向移动。渲染效果如图7所示,其中(a)(b)分别是场景的两个局部效果,采用本发明碰撞检测方法,绘制帧频分别达到了30帧/秒和24帧/秒,满足实时性要求。
将本发明方法应用于3维空间中随机飞散的长方体碰撞检测实验,该实验中,长方体个数为3000个,其速度大小和方向每帧随机变化,如图8所示(检测到的碰撞显示为白色),采用本发明碰撞检测方法,绘制帧频达到30帧/秒。
与一般的碰撞检测系统所用BVHs树相比,本发明方法采用的平衡二叉树可以保证树的形状不会退化成0(n)的链表;另外,当平衡二叉树处于最不平衡的情况时,同样可构造完全的二叉树,深度大约为
Figure A20091008671900121
平衡二叉树在最差情况与最理想的二叉树深度的比值不超过(1/0.694-1)×100%=44%,由于平衡二叉树深度可以线性表示出完全二叉树的深度,因此两者具有相同的时间复杂度0(logn)。

Claims (4)

1、一种基于平衡二叉树的大规模虚拟场景碰撞检测方法,其特征在于步骤如下:
(1)根据虚拟场景及物体信息构建物体信息列表及扩展平衡二叉包围盒树;
对一个复杂场景,其中包含物体集合{Pi},为每个物体构建一个OBB层次包围盒结构,然后组织成一棵平衡二叉包围盒树;在平衡二叉包围盒树建立后,每个叶结点对应一个场景中的物体,每个非叶结点包含一组物体;平衡二叉包围盒树的叶结点采用物体的OBB包围盒而非叶结点采用AABB包围盒,包含其下一组物体;
(2)基于扩展平衡二叉包围盒树进行碰撞检测;
遍历平衡二叉包围盒树,采用AABB碰撞检测方法进行碰撞判定;
(3)场景中增加、删除物体或场景中的物体发生位置变化引起场景结构的局部变化,对平衡二叉包围盒树进行更新以维持平衡;
针对场景结构的局部变化,平衡二叉包围盒树需不断更新以维持平衡;为确保更新过程的效率,本发明对普通的平衡二叉树进行扩展;此时根据每个包围盒运动,以及场景物体数量不断变化,通过更新场景算法维护平衡二叉包围盒树结构。
2、根据权利要求1所述的一种基于平衡二叉树的大规模虚拟场景碰撞检测方法,其特征在于:所述的步骤(1)中本发明在初始化复杂场景采用以下流程:
(1.1)采用自顶向下的层次包围盒树空间剖分的思想建立一个包含所有物体信息的表,对所有物体,根据虚拟空间的分布坐标范围和物体的位置坐标按照二分法查找出表中位置,然后进行表插入操作,本步骤操作的时间复杂度为O(nlogn);该表是建树的基础,便于以后的树的维护;
(1.2)采用自顶向下的二分递归建树法,利用排好序的表构造出整棵扩展平衡二叉包围盒树;每个物体的包围盒位于叶结点,这样一个包含n个物体的树,实际上具有2n-1个结点,二分建树时间复杂度为O(n)。
3、根据权利要求1所述的一种基于平衡二叉树的大规模虚拟场景碰撞检测方法,其特征在于:所述的步骤(2)中场景的碰撞检测采用以下流程:
(2.1)构造一个需进行碰撞检测的分支对列表,初始化为空列表;
(2.2)获得根结点的两个子结点A、B,形成分支对“A、B”,添加到碰撞检测的分支对列表,进入步骤2.3;
(2.3)遍历碰撞检测的分支对列表,对每个分支对“A、B”执行步骤2.4,如果分支对列表已空,则结束碰撞检测;
(2.4)如果对应A、B两结点的包围盒发生碰撞,则执行步骤2.5;否则说明碰撞未发生,从碰撞检测的分支对列表删除分支对“A、B”,然后进行如下处理:如果A节点为非叶结点,则在碰撞检测的分支对列表中添加分支对“A的左子树节点、A的右子树节点”,如果B节点为非叶结点,则在碰撞检测的分支对列表中添加分支对“B的左子树节点、B的右子树节点”,返回步骤2.3;
(2.5)对A、B两结点的包围盒发生碰撞的情况,分以下两种情况处理:
情况1:如A、B两结点是否均为叶结点,判断A、B是否为同一包围盒,是则表示A、B为同一物体,此时判断未发生碰撞,否则判断发生碰撞并记录。上述工作完成后,从碰撞检测的分支对列表删除分支对(A、B),返回步骤2.3;
情况2:若A、B中至少有一个为非叶结点,则执行步骤2.6;
(2.6)如果发生碰撞的A、B结点中至少有一个为非叶结点,则分以下两种情况处理:
情况1:若发生碰撞的A、B节点为同一节点,则新增以下3项分支对并进入步骤2.7,这些分支对包括A的左子树结点与A的左子树结点、A的左子树结点与A的右子树结点、A的右子树结点与A的右子树结点;
情况2:若发生碰撞的A、B节点为不同的节点,此时由于A、B中至少有一个为非叶结点,故可分以下两种情况分别处理:
若A、B均为非叶结点,则新增以下4项分支对并进入步骤2.7,这些分支对包括A的左子树结点与B的左子树结点、A的左子树结点与B的右子树结点、A的右子树结点与B的左子树结点、A的右子树结点与B的右子树结点;
若A、B中只有一个非叶结点,不失一般性,设A为非叶结点,B为叶结点,则新增以下2项分支对并进入步骤2.7,这些分支对包括A的左子树结点与B结点、A的右子树结点与B结点;
(2.7)将步骤2.6中新增的检测分支对添加到碰撞检测的分支对列表,同时从碰撞检测的分支对列表删除步骤2.6中已处理的分支对“A、B”,返回步骤2.3。
4、根据权利要求1所述的一种基于平衡二叉树的大规模虚拟场景碰撞检测方法,其特征在于:所述步骤(3)场景结构改变的处理流程如下:
(3.1)根据增加物体、删除物体、修改物体位置情况,修改场景树信息,其中删除物体的过程为增加物体的逆过程,而修改物体位置的过程为删除物体然后增加物体的组合过程;对增加物体,需设定其包围盒并在物体表中增加一条记录,然后在树中找到对应的位置,增加叶结点和一个用于连接的非叶结点;对删除物体,需在物体表中删除相应记录,然后在树中找到对应的位置,删除叶结点和用于连接的非叶结点;
(3.2)自底向上的更新新增加结点这一枝上的包围盒,结点的深度h(a),最大孩子值m(a)和平衡因子w(a);每更新一个结点,判断该分支w(a)的值,是否非平衡;如果非平衡则执行步骤3.3;否则,分支更新完毕,执行步骤3.4;
(3.3)对当前的子树进行平衡化操作;更新子树的深度、包围盒等信息,然后执行步骤3.2;
(3.4)将新增物体信息加入场景物体管理列表。
CNA2009100867190A 2009-06-24 2009-06-24 一种基于平衡二叉树的大规模虚拟场景碰撞检测方法 Pending CN101593366A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNA2009100867190A CN101593366A (zh) 2009-06-24 2009-06-24 一种基于平衡二叉树的大规模虚拟场景碰撞检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2009100867190A CN101593366A (zh) 2009-06-24 2009-06-24 一种基于平衡二叉树的大规模虚拟场景碰撞检测方法

Publications (1)

Publication Number Publication Date
CN101593366A true CN101593366A (zh) 2009-12-02

Family

ID=41408007

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2009100867190A Pending CN101593366A (zh) 2009-06-24 2009-06-24 一种基于平衡二叉树的大规模虚拟场景碰撞检测方法

Country Status (1)

Country Link
CN (1) CN101593366A (zh)

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101819675A (zh) * 2010-04-19 2010-09-01 浙江大学 一种基于gpu的层次包围盒的快速构造方法
CN102368280A (zh) * 2011-10-21 2012-03-07 北京航空航天大学 一种面向虚拟装配的基于aabb-obb混合包围盒的碰撞检测方法
CN102446122A (zh) * 2011-12-21 2012-05-09 上海电机学院 一种基于包围盒树的碰撞检测方法
CN102509317A (zh) * 2011-09-27 2012-06-20 北京像素软件科技股份有限公司 一种实时碰撞检测系统的实现方法
CN102915564A (zh) * 2012-08-31 2013-02-06 浙江理工大学 一种基于有向包围盒和轴向包围盒的脚楦匹配方法
CN103699716A (zh) * 2013-12-01 2014-04-02 北京航空航天大学 一种个性化三维医学图像驱动的器官虚拟显示方法
CN104200031A (zh) * 2014-09-04 2014-12-10 大连大学 一种基于距离优先和时空相关性的碰撞检测方法
CN104766371A (zh) * 2015-04-13 2015-07-08 南京工程学院 一种大规模场景中物体碰撞检测方法
CN105488851A (zh) * 2015-11-30 2016-04-13 腾讯科技(深圳)有限公司 实时虚拟场景中碰撞体之间碰撞探测的方法和装置
CN105498211A (zh) * 2015-12-11 2016-04-20 网易(杭州)网络有限公司 游戏中位置关系的处理方法和装置
CN105874511A (zh) * 2013-12-18 2016-08-17 索尼互动娱乐股份有限公司 模拟设备
CN106055740A (zh) * 2016-05-19 2016-10-26 华东师范大学 一种基于aabb流计算的变形体碰撞检测方法
CN106096082A (zh) * 2016-05-24 2016-11-09 国网安徽省电力公司宿州供电公司 一种基于数据分块及并行处理的碰撞检测方法
CN107116540A (zh) * 2016-02-24 2017-09-01 中国科学院沈阳计算技术研究所有限公司 一种基于scs包围结构的机器人碰撞检测方法
CN107689078A (zh) * 2017-08-21 2018-02-13 哈尔滨工程大学 一种基于链表排序平衡二叉树的层次包围盒树构建方法
CN108416843A (zh) * 2018-03-08 2018-08-17 浙江科澜信息技术有限公司 三维场景构建方法、装置、设备及计算机可读存储介质
CN108549924A (zh) * 2018-04-19 2018-09-18 浙江工业大学 一种用于植物群体虚拟仿真的植株碰撞检测方法
CN108646917A (zh) * 2018-05-09 2018-10-12 深圳市骇凯特科技有限公司 智能设备控制方法及装置、电子设备和介质
CN110047143A (zh) * 2019-03-04 2019-07-23 南昌大学 一种基于空间细分与动态包围盒的连续碰撞检测方法
CN111968149A (zh) * 2020-07-17 2020-11-20 哈尔滨理工大学 一种大规模场景中的粗碰撞检测方法
CN112001999A (zh) * 2020-05-25 2020-11-27 北京空间飞行器总体设计部 一种复杂多体装置运动干涉检测方法
CN114012726A (zh) * 2021-11-08 2022-02-08 南京航空航天大学 一种航天机械臂碰撞检测方法
US20220179837A1 (en) * 2018-10-25 2022-06-09 Changsha Xinhong Software Ltd. Unbalanced binary tree construction method based on calculation of binary boundary value
CN116036604A (zh) * 2023-01-28 2023-05-02 腾讯科技(深圳)有限公司 数据处理方法、装置、计算机及可读存储介质

Cited By (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101819675A (zh) * 2010-04-19 2010-09-01 浙江大学 一种基于gpu的层次包围盒的快速构造方法
CN102509317A (zh) * 2011-09-27 2012-06-20 北京像素软件科技股份有限公司 一种实时碰撞检测系统的实现方法
CN102368280A (zh) * 2011-10-21 2012-03-07 北京航空航天大学 一种面向虚拟装配的基于aabb-obb混合包围盒的碰撞检测方法
CN102446122A (zh) * 2011-12-21 2012-05-09 上海电机学院 一种基于包围盒树的碰撞检测方法
CN102915564A (zh) * 2012-08-31 2013-02-06 浙江理工大学 一种基于有向包围盒和轴向包围盒的脚楦匹配方法
CN102915564B (zh) * 2012-08-31 2014-12-17 浙江理工大学 一种基于有向包围盒和轴向包围盒的脚楦匹配方法
CN103699716A (zh) * 2013-12-01 2014-04-02 北京航空航天大学 一种个性化三维医学图像驱动的器官虚拟显示方法
CN103699716B (zh) * 2013-12-01 2016-09-28 北京航空航天大学 一种个性化三维医学图像驱动的器官虚拟显示方法
US10824775B2 (en) 2013-12-18 2020-11-03 Sony Interactive Entertainment Inc. Simulation method and device for determining collision between objects
CN105874511B (zh) * 2013-12-18 2019-04-05 索尼互动娱乐股份有限公司 模拟设备
CN105874511A (zh) * 2013-12-18 2016-08-17 索尼互动娱乐股份有限公司 模拟设备
CN104200031B (zh) * 2014-09-04 2017-11-24 大连大学 一种基于距离优先和时空相关性的碰撞检测方法
CN104200031A (zh) * 2014-09-04 2014-12-10 大连大学 一种基于距离优先和时空相关性的碰撞检测方法
CN104766371A (zh) * 2015-04-13 2015-07-08 南京工程学院 一种大规模场景中物体碰撞检测方法
CN105488851A (zh) * 2015-11-30 2016-04-13 腾讯科技(深圳)有限公司 实时虚拟场景中碰撞体之间碰撞探测的方法和装置
US10235764B2 (en) 2015-11-30 2019-03-19 Tencent Technology (Shenzhen) Company Limited Method, terminal, and storage medium for detecting collision between colliders in real-time virtual scene
CN105498211A (zh) * 2015-12-11 2016-04-20 网易(杭州)网络有限公司 游戏中位置关系的处理方法和装置
CN105498211B (zh) * 2015-12-11 2019-04-23 网易(杭州)网络有限公司 游戏中位置关系的处理方法和装置
CN107116540A (zh) * 2016-02-24 2017-09-01 中国科学院沈阳计算技术研究所有限公司 一种基于scs包围结构的机器人碰撞检测方法
CN106055740A (zh) * 2016-05-19 2016-10-26 华东师范大学 一种基于aabb流计算的变形体碰撞检测方法
CN106096082A (zh) * 2016-05-24 2016-11-09 国网安徽省电力公司宿州供电公司 一种基于数据分块及并行处理的碰撞检测方法
CN107689078A (zh) * 2017-08-21 2018-02-13 哈尔滨工程大学 一种基于链表排序平衡二叉树的层次包围盒树构建方法
CN108416843A (zh) * 2018-03-08 2018-08-17 浙江科澜信息技术有限公司 三维场景构建方法、装置、设备及计算机可读存储介质
CN108549924A (zh) * 2018-04-19 2018-09-18 浙江工业大学 一种用于植物群体虚拟仿真的植株碰撞检测方法
CN108549924B (zh) * 2018-04-19 2021-08-03 浙江工业大学 一种用于植物群体虚拟仿真的植株碰撞检测方法
CN108646917B (zh) * 2018-05-09 2021-11-09 深圳市骇凯特科技有限公司 智能设备控制方法及装置、电子设备和介质
CN108646917A (zh) * 2018-05-09 2018-10-12 深圳市骇凯特科技有限公司 智能设备控制方法及装置、电子设备和介质
US20220179837A1 (en) * 2018-10-25 2022-06-09 Changsha Xinhong Software Ltd. Unbalanced binary tree construction method based on calculation of binary boundary value
US11803529B2 (en) * 2018-10-25 2023-10-31 Changsha Xinhong Software, LTD Unbalanced binary tree construction method based on calculation of binary boundary value
CN110047143A (zh) * 2019-03-04 2019-07-23 南昌大学 一种基于空间细分与动态包围盒的连续碰撞检测方法
CN112001999A (zh) * 2020-05-25 2020-11-27 北京空间飞行器总体设计部 一种复杂多体装置运动干涉检测方法
CN111968149A (zh) * 2020-07-17 2020-11-20 哈尔滨理工大学 一种大规模场景中的粗碰撞检测方法
CN114012726A (zh) * 2021-11-08 2022-02-08 南京航空航天大学 一种航天机械臂碰撞检测方法
CN116036604A (zh) * 2023-01-28 2023-05-02 腾讯科技(深圳)有限公司 数据处理方法、装置、计算机及可读存储介质
CN116036604B (zh) * 2023-01-28 2023-05-30 腾讯科技(深圳)有限公司 数据处理方法、装置、计算机及可读存储介质

Similar Documents

Publication Publication Date Title
CN101593366A (zh) 一种基于平衡二叉树的大规模虚拟场景碰撞检测方法
Gao et al. Feature suppression based CAD mesh model simplification
CN102332180B (zh) 一种基于立体裁剪的三维服装造型与纸样设计方法
Schauer et al. Collision detection between point clouds using an efficient kd tree implementation
CN107123164A (zh) 保持锐利特征的三维重建方法及系统
CN103714575B (zh) 一种sph与动态表面网格相结合的流体仿真方法
JP2005038219A (ja) 境界表現データからボリュームデータを生成する方法及びそのプログラム
CN102609992A (zh) 基于三角网格变形体的自碰撞检测方法
CN107886564A (zh) 用于实现三维场景显示的方法
CN104504760B (zh) 实时更新三维图像的方法和系统
CN110033519A (zh) 基于隐式函数的三维建模方法、装置、系统及存储介质
CN106023297A (zh) 一种精细三维模型的纹理动态组织方法
CN104715507B (zh) 一种基于曲面片的三维地理实体自动构建方法
Cao et al. Computation of medial axis and offset curves of curved boundaries in planar domain
CN104881518A (zh) 一种飞行器的三维视景仿真系统
Liu et al. Real-time, dynamic level-of-detail management for three-axis NC milling simulation
CN104809760A (zh) 基于深度优先策略的地理空间三维外轮廓自动构建方法
Adams et al. Efficient raytracing of deforming point-sampled surfaces
Zhang et al. A geometry and texture coupled flexible generalization of urban building models
CN102298794A (zh) 一种基于面网格的实时水滴仿真方法
CN102393827A (zh) 一种基于连续法向锥剔除的柔性场景连续碰撞检测方法
Leng et al. Rapid simplification of 3D geometry model of mechanisms in the digital twins-driven manufacturing system design
CN102393825A (zh) 一种基于非共面剔除的柔性场景连续碰撞检测方法
CN109472863A (zh) 一种基于笔画交互的实时3d黏土建模方法
Alderson et al. Optimizing line-of-sight using simplified regular terrains

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20091202