第28卷第4期 2007年12月 长春工业大学学报(自然科学版) Journal of Changchun University of Techonology(Natural Science Edition)Vo1.28,No.4 Dec.2007 基于空间数据结构的快速碰撞检测算法 韩文君 , 赵(I.长春工业大学计算机科学与工程学院,吉林长春伟 130012) 130012;2.吉林大学计算机科学与技术学院,吉林长春摘 要:在已有的预留碰撞算法基础上,提出了一种以空间数据结构管理为核心,用简化的几 何模型表示(0BB层次树)结合起来实现复杂物体间的实时碰撞检测算法,主要采用包围盒的 方法对检测物体进行包围,然后对包围盒所形成的体进行结构索引,遍历体索引输出检测结 果,这样在少量增加存储空间的前提下,可以提高碰撞检测的速度。 关键词:碰撞检测;空间数据结构;包围盒 中图分类号:TP391.9 文献标识码:A 文章编号:1006—2939(2007)04—0415-06 A fast coi l ision detection algorithm based on space data structure HAN Wen—jun . ZHAO Wei ' (1.School of Computer Science&Engineering,Changchun University of Technology,Changchun 130012,China; 2.College of Computer Science and Technology,Jilin University,Changchun 130012,China) Abstract:Basing on the pre—reservation arithmetic,a real—time algorithm with space data structure management as core is put forward,where the simplified geometry models(OBB layer tree)are combined to realize the collision detection among the complex objects.The encircle box method is applied to surround the detected obj ects,and then the encircled body is indexed.After the over all searching,the result is output to increase the collision detecting speed under the pre—condition of increasing the storage space less. Key words:collision detection;space data structure;encircle box. 0 引 言 虚拟现实(VR)技术的主要目标之一是允许 用户以尽可能自然的方式与虚拟世界直接交互, 因此,VR系统的用户希望虚拟物体给人的感觉 是“物理存在”。但由于在真提高虚拟环境的真实 性、增强虚拟环境的沉实的物体运动中,任意两个 物体不会相互贯穿,因而在运动过程中,精确的碰 器人和虚拟现实等领域中的一个经典问题,多年 来一直受到较多的关注[2]。已有许多研究者对碰 撞检测问题及其应用进行了深入广泛的研究,提 出了许多有效的检测方法,形成了一些较为成熟 的技术。文献[3]采用层次包围盒技术加速多面 体场景的碰撞检测,它的基本思想是用体积稍大 且特性简单的几何体(包围盒)来近似地代替复杂 的几何对象,并通过构造树状层次结构逐渐逼近 对象的几何特性,从而提高碰撞检测的效率。为 了提高碰撞检测的实时性和降低算法的复杂性, 撞检测对浸感起着至关重要的作用E¨。 碰撞问题作为计算几何、计算机动画、仿真机 收稿日期:2007—04—06 基金项目:国家自然科学基金资助项目(60573182,69883004) 作者简介:韩文君(1983一),女,汉族,吉林长春人,长春工业大学硕士研究生,主要从事人工智能方向研究.*联系人:赵 伟 (1967一),男,汉族,吉林长春人,长春工业大学副教授,吉林大学博士研究生,主要从事人工智能、多Agent系统、软件自 动化与程序分析研究,E—mail:princel205@163.com. 维普资讯 http://www.cqvip.com 416 长春工业大学学报(自然科学版) 第28卷 文献[41提出了基于凸多面体剖分的并行碰撞检 测算法。文献[5]对包围盒方法进行了一系列的 理论研究,证明了该方法可以使碰撞检测的算法 是否满足下列逻辑表达式: L一[P (£ )N Pz(£ )N…n P (£ )]V [S ( )N Sz(£ )N…n S (£ )]一 复杂度大大降低。文献[6]则提出了两个有效的 碰撞检测算法:其一用来处理三角剖分过的物体 表面;另一算法则用来处理多面体环境的碰撞检 测。由于任一物体表面均可表示成一系列三角面 片,因而该碰撞检测算法具有普遍性,但这一算法 如果表达式成立,则不发生碰撞,否则发生碰 撞。 1.2 空间数据结构碰撞检测算法 对于一个体的拓扑关系的数据结构包括体、 面、环、边、点等元素。要对这些基本元素进行索 的缺点是当场景物为一复杂的雕塑曲面时,对表 面的三角部分可能产生大量的三角片,这会大大 影响算法的效率,为此,文献[7]提出了基于参数 曲面的集合碰撞检测算法。采用层次八叉树结 构,文献[8]提出了一个基于三角形的快速碰撞检 测算法,并把它应用于人体动画和衣服动画中。 文中提出了一种基于物体空间数据结构的快 速碰撞检测算法。首先,采用包围盒的方法对检 测物体进行包围(只进行包围,不进行检测)。其 次,对包围盒所形成的体进行结构索引,遍历体 索引输出检测结果。算法的整体框架如图1所 示。 物体模型输入 返回检测结果 实体凸分解 检测几何特征索引值 得到凸体集合 是否发生变化,以确 ——r一 土 定包围盒是否相交 建构层次 遍历物体 凸体二叉树 对的层次树 为层次树中的每 针对每个包围 个凸体结点生成 盒的几何特征 OBB包围盒 进行索引 图1基于空间数据结构检测算法的整体框架 1碰撞检测与空间碰撞理论 1.1碰撞检测定义 假设三维空间中有N个运动模型,随着时间 改变位置和状态。从计算几何的角度可以这样定 义碰撞检测。 定义1 设3D空间中有N个运动模型,构 成集合M一{M ,M2,…, },运动前N M 一 , z—1 (tj)为随时间变化的运动模型Mf在时刻t,的 位置,S (£,)为随时间变化模型的状态。碰撞检 测则是判断当t=t。,t ”,t (m为检测碰撞的有 效时间)时,运动模型集M中元素M ,M2,…, 引,如果体的构成复杂,那么索引起来将是非常耗 时的事情,所以这里采用了包围盒的思想。文中 采用了方向包围盒OBB(Oriented Bounding Bo— xes)。 1.2.1 OBB包围盒的计算 利用一次矩(均值)和二次矩(协方差矩阵)统 计量来计算包围盒的位置和方向。设第i个三角 形的顶点矢量为P ,q 和r ,包围盒包围的三角 面片数为 。 包围盒的中心位置为: 1 n 一 ∑( +q + 协方差矩阵元素: c 一 ∑( i i+ + ) 其中,P 一P --,u,q —q — , 一,』一 ,均为R。 中的一个向量。 利用数值的方法解出协方差矩阵的特征向量 并单位化,由于C是一个实对称矩阵,所以矩阵C 的特征向量相互垂直,可以作为包围盒的方向轴。 把将要包围的几何体的顶点向方向轴上投影,找 出各方向轴的投影区间,各投影区间的长度就是 所求包围盒的相应尺寸。 1.2.2 OBB包围盒的相交测试方法 凸块OBB包围盒之间的相交检测方法采用 了Gottschalk等基于分离轴定理提出的相交检 测方法。 分离轴的重叠判断方法如图2所示。 图中,A和B为两个OBB包围盒,向量D为 A中心点至B中心点的距离矢量。单位向量SA 为15个分离轴之一。两个投影区间中点之距离 长度为l D・SA l。P^和ID日分别为A,B在SA上 的投影区间半径。于是,可以得出投影区间处于 分离状态的充分必要条件为: I D・SA I>p^+P日 维普资讯 http://www.cqvip.com 第4期 韩文君,等:基于空间数据结构的快速碰撞检测算法 417 即 >O,其中 一lD・SAl一(pa+pB)。 图2 OBB包围盒的相交测试 这里 的绝对值为在分离轴SA上的投影区 间重叠部分的长度或为投影区间分离间隙的长 度。令a 和b ( 一1,2,3)分别为A,B的半径,即 分别为A,B两包围盒长宽高的一半;A 和B ( 一1,2,3)分别为两包围盒的坐标轴单位向量; 则两包围盒在SA上的投影区间半径lDn和lDe可 由式(1)得到。 。一二 > l口 A ・sA l (1) 一> l biB ・sA l 当两OBB包围盒相交,则它们在15个分离 轴上的投影区间都是相交的。这时算法将保留在 它们6个包围盒轴上的投影区间重叠长度,即式 (1)中 的绝对值。 2算法的设计思想 2.1体的空间数据结构 空间数据结构如图3所示。 / \ Fl … 上 上 £1 八 l E2 E3 E4 图3空间数据结构 此空间数据结构共包含4个结点:体结点、面 结点、边结点和顶点结点。结点之间通过结构指 针相互联系。 2.1.1 体结点 体是三维几何元素,是由封闭表面围成的空 间,也是欧氏空间中非空有界的封闭子集,其边界 是有限面的并集。体结点是各种引用的根结点, 从体结点出发,可以索引到任何其它的结点。 2.1.2 面结点 面是形体上一个有线、非零的区域,它是有环 界定其范围,面有方向性,一般用其外法向量的方 法定义面的正负。 2.1.3边结点 边是一维几何元素,是两个或多个相邻面的 交界,在这里边结点对应几何元素的边。 2.1.4顶点结点 点是实体造型中的最基本元素,自由曲线、曲 面或其它形体均可用有序的点集表示。所以,顶 点结点必须包含顶点的空间三维坐标值。 2.2元素的基本操作 (1)对于基本几何元素,可做到下列操作。 ・已知一个体,查找组成体的所有面、边、顶 点; ・已知一个面,一条边或一个顶点,查找它所 属的体; ・已知一个面,顺序查找围成它的所有的边; ・已知一个边,查找交于该边的所有面,查找 该边的邻边,查找该边的两个端点; ・已知一个顶点,查找交于该顶点的所属边、 所属面或所属体。 (2)要想各个几何元素之间查找迅速,必然要 在它们之间建立广泛的联系,这样必然增加存储 空间的占有量。但目前,计算机的内存价格低廉, 容量较大,完全可以满足对存储空间的需求。 (3)空间数据结构法的目的是减少每次求交 检测中所涉及的体的个数。当物体A的几何特 征索引与物体B的一个结点包围盒发生关系时, 保留所有发生改变的特征索引,并组建一个特征 索引表,存贮特征指针。为获取物体A的几何特 征索引与B结点包围盒的相交结果,需要读取深 度测试的结果,通过构造一个二维随机函数 f(U, ),U ≤U≤Um. , ≤ ≤ …作为生成 子索引的数据,用N( , )表示产生一个均值 , 标准差为 的正态随机函数,产生f(U, )的方 法是: 维普资讯 http://www.cqvip.com 418 长春工业大学学报(自然科学版) 第28卷 ff(U i ,Vmt )一ft—N(O, ) 2.3.2建面结点索引 KSJFace*solid;/指向面所属体的指针 I f(U ,Vm )一 一N(O, ) I f(U ,V )一 一N(O, ) 【f(U ,Vm )一 一N(O, ) 得出: 2.3.3建边结点索引 KSJLine*vexl;/边的顶点指针 KSJLine*facel;/边所属面的指针 KSJLine*solidl;/边所属体的指针 f厂( , )一N( ,2-18) 2.3.4建顶点结点指针索引 f厂( ~Vm)一N( ) {厂( ~Vm)一N( ) Jf(Umin, )一N( ) I厂 ,VTmin ̄Vmax)一N( ) 把区域[【, ¨U ]x[ i , ]上的随机 函数分成以[(L厂mi +Um )/2,( i +Vm )/2]为 分界点的4个子域上的随机函数。从公式上可以 看出,每分割一次,随机函数的标准差便下降二分 之一,这样产生的厂(U, )在局部变化均衡。然 后采用新的几何特征索引,分别与B层次包围盒 树上的当前结点的两个子索引包围盒进行求交运 算,如此递归计算下去,直到B层次包围盒树的 叶结点中是三角形。一般地,由于几何特征索引 在求交计算中逐层简化,CUP所需绘制的象素个 数也逐步减少,从而可大大加快绘制速度,提高算 法整体效率。 2.3算法实现 输入:两个物体A,B; 输出:碰撞检测结果(真值为相交,假值为不 交)。 Spaee_Struct(A,B)f 建立A,B两物体的方向包围盒,并将此包围盒做为 体结点; /*体结点是各种31用的根结点,从体结点出发,可 以搜索任何其他的结点*/ If(A,B为基本几何元素){用基本碰撞检测算法进行 检测,并返回结果; 即:AB= 未发生碰撞 AB=/: 发生碰撞) Else( 2.3.1建体结点索引 KSJSolid*face/指向面的指针 KSJSolid*dege;/指向边的指针 KSJSolid vex;/指向点的指针 KSJPoint*solid2;/A所属体指针 KSJPoint*degel;/点所属边指针 KSJPoint*face2;/A所属面指针 If(结点的初始索引发生变化){ 说明当前两个结点所对应的OBB包围盒相交,即 AB≠ ,继续进一步判断,将包围盒一分为二,其中一部 分包含碰撞点处的区域。产生4个体结点C、D、E、F。 Space_Struct(C,D,E,F): } While(当前结点为根结点或叶子结点) 返回A,B两物体不会发生碰撞,遍历过程终止; ) ) 3性能分析与评价 文中提出的基于空间数据结构的快速碰撞检 测算法是以几何物体的基本拓扑关系为基础,以 简单性及紧密性都很好的方向包围盒(OBB)为辅 助的一种快速检测算法,要想各个几何元素之间 查询迅速,必然要在它们之间建立广泛的联系,这 样也必然增加存储空间的占用量,但相对于OBB 间的相交测试:需测试15条可能是分离轴的轴,2 个OBB的相交测试最多需要15次比较运算,6O 次加减运算,81次乘法运算和24次绝对值运算。 本算法的复杂程度大幅度下降,并且能够快速地 检测出碰撞。 我们主要同基于OBB包围盒的RAPID系 统进行比较,这是由于RAPID系统的代码是开 放的,而且它是近年来比较著名的一个碰撞检测 系统,常常被用做衡量碰撞测试算法的一个标准, 故用C++实现了基于空间数据结构的碰撞检测 算法。 实验的运行环境见表1。 表1实验运行环境 维普资讯 http://www.cqvip.com 第4期 韩文君,等:基于空间数据结构的快速碰撞检测算法 419 构造包围盒层次的时间开销见表2。 表2构造包围盒层次的时间开销(单位:s) 表3鑫要 磊 毒嵩 学能比较 当环境中的物体运行5 000步时,在模型1 空问数据结构算法与AABB,OBB的性能比 较见表3。 16O 与模型2中所用时间的实验数据直观比较如图4 所示。 12O 曰 譬 嚣 80 ∞\里鲁暴 40 ∞ ∞ ∞ ∞ ∞ 0 ㈣ 。 0 圈基于AABB包 盒算池 口萆于OBB包 盒并浊 圜 于空问数据结构的碰撞检测算法 (a)模型1中检测结果的对比 (b)模型2中检测结果的对比 图4 3种算法运行5 000步实验数据的比较 通过图4实验数据的比较,采用基于空间数 据结构的快速碰撞检测算法后,检测时间得到降 低,显著地提高了碰撞检测的速度。 针对相同场景,本算法和基于OBB包围盒的 RAPID算法的碰撞检测时间变化率的比较如图 5所示。 100 50 ; 雕 o 篓一50 捌 100 碰撞检测的步数 图5 碰撞检测时间变化率的比较图 图5中,水平轴是碰撞检测的步数,垂直轴是 式中:t ——碰撞过程中记录每一步碰撞检测所 需的时间; 碰撞检测时间的变化率叩: ∞一 一 一 ×lOO% 运行5 000步的平均时间。 从图中不难看出,本算法具有基于物体几何 维普资讯 http://www.cqvip.com
420 长春工业大学学报(自然科学版) 第28卷 空间碰撞检测算法所不具备的时间消耗的稳定 性,即对同一复杂度的场景而言,不同步数中的碰 撞检测时间变化不大,这一特点有利于准确预测 碰撞检测时间。 4 结 论 目前,碰撞检测算法正得到越来越多的研究, 应用于越来越多的领域。文中提出了一种基于空 间数据结构的快速碰撞检测算法,以空间数据结 构管理为核心,将图形硬件的计算优势和简单的 几何模型表示结合起来,实现复杂物体间的实时 碰撞检测,并在具体的应用中对该算法进行验证。 实验证明,该算法确实加快了碰撞检测的速度,同 时,通过碰撞检测时间的变化率,再次证明此算法 具有基于物体几何空间碰撞检测算法所不具备的 时间消耗的稳定性。 目前,大部分碰撞检测算法都是针对具体的 应用场合设计的,没有一种算法适用于所有的情 形,且主要集中在静态环境下碰撞检测效率的研 究,而对动态环境下复杂虚拟场景中多虚拟对象 之间的碰撞检测问题,高效率的检测算法还不多。 在以后的工作中,我们将进一步研究空间数据结 构索引,在碰撞检测的简单性和包裹物体的紧密 性之间灵活取舍,减少存储空间的占有量,以建立 面向各类应用的更加实用、灵活统一的基于空间 数据结构的碰撞检测算法。 参考文献: E13魏迎梅,王涌,吴泉源.碰撞检测中的固定方向凸 包包围盒的研究[J].软件学报,1999,12:1 253— 1 263. E23 王志强,洪嘉振,杨 辉.碰撞检测问题研究综述 EJ3.软件学报,1999,10(5):545—551. E3]Hahn J K.Realistic animation of rigid bodiesEJ]. ACM Computer Graphics,1988,22(4):299—308. E4]金文华,饶上荣,唐卫清,等.基于顶点可见性的凹 多边形快速凸分解算法EJ].计算机研究与发展, 1999,36(12):1 455-1 460. E5]Suri S,Hubbard P M,Hughes J.Collision detec— tion in aspect and scale bourded polyhedra[J]. Proc.9th ACM—SIAM Sympos.Discrete Algo— rithms,1998,6(3):291-302. I-6] Moore M,Wilhelms J.Collision detection and re— sponse for computer animationFJ].ACM Computer Graphics,1988,22(4):289-298. -I7] Baraff D.Interactive simulation of solid rigid bodies [J].IEEE Computer Graphics and Applications, 1995,15(3):63-75. E8] Yang Y,Thalmann N.An improved algorithm for collision detection in cloth animation with human body[J].First Pacific Conference on Computer Graphics and Application,1993,14(2):237—251.
因篇幅问题不能全部显示,请点此查看更多更全内容