基于混合层次包围盒的快速碰撞检测方法与流程

文档序号:14474417阅读:2363来源:国知局
基于混合层次包围盒的快速碰撞检测方法与流程

一、技术领域

本发明涉及一种基于混合层次包围盒的快速碰撞检测的方法,应用于虚拟装配和三维地表建模领域。

二、

背景技术:

碰撞检测作为计算机仿真领域的核心技术之一,是保证虚拟场景沉浸感、交互性以及构想性不可缺少的一部分。其主要作用是检测出虚拟场景中的物体之间是否发生穿透现象从而避免破坏场景真实感。针对众多领域的碰撞检测问题,学者们提出了许多种不同类型的碰撞检测方法,其中基于层次包围盒的碰撞检测方法一直是研究的热点,目前被广泛应用于各类领域中。这类方法的整个碰撞检测过程分为粗略碰撞检测(包围盒相交测试)和精确碰撞检测(三角形相交测试)两个阶段。它的核心思想是用常见的几何图形包围复杂的模型排除大部分不相交的物体从而减少基本图元对的相交测试,常见的包围盒主要分为轴向包围盒(aabb)、有向包围盒(obb)、离散方向包围盒(k-dop)等几类。aabb构建以及测试较简单,但紧密性较差;而obb则构建和测试复杂,紧密性较好。根据这些包围盒的特点,一些学者提出了基于混合包围盒的碰撞检测方法,但以上大部分方法中不同包围盒之间的相交测试是相互独立的,测试之间没有联系且并没有改进精确检测阶段中三角形之间的相交测试,效率提升并不明显。现有技术中存在的问题是如何在不降低碰撞测试精度的条件下提升碰撞测试的效率。

三、

技术实现要素:

【发明目的】

为了弥补现有的基于层次包围盒碰撞检测算法效率不足,本发明提供了一种基于混合层次包围盒的快速碰撞检测方法。方法中层次包围盒树的每个节点使用双层包围盒,外层使用特性简单的aabb,用以快速排除间隔距离较大时的情况,当外层的aabb无法排除时则使用内层的obb进行检测。在粗略碰撞检测阶段,本发明将aabb之间的测试与obb之间的测试联系在一起,对于内层obb之间的相交测试只需检测5条分离轴,简化了obb之间的相交测试;在基本图元相交测试阶段,利用obb包围三角形的特点,利用obb之间相交测试所计算的中间值代替三角形的坐标值,省去了不同模型中的三角形坐标变换这一步骤也提升了整个方法的效率。

【技术方案】

为实现上述发明目的,本发明所使用的技术方案如下:

第一步,构建混合层次包围盒树(bvh):采用自顶向下的方法为虚拟环境中的每个模型构建层次包围盒树,树的结构为二叉树,树的每个节点中包含外层的aabb信息、内层的obb信息以及包含的三角形的坐标信息,包围盒的计算顺序为先计算obb后计算aabb。

第二步,包围盒之间的相交测试:对不同层次包围盒树的节点中的包围之间进行相交测试,首先对根节点中的外层aabb进行相交测试,若aabb之间分离,则直接判断模型之间分离,反之对内层的obb进行相交测试,根据外层aabb相交的结果可以简化obb之间的相交测试只进行5条分离轴的相交测试,若判断obb之间也相交则用其中一个节点的全部子节点与另外一个节点进行相交测试,直到层次包围盒树均遍历到叶子节点。

第三步,三角形相交测试:在第二步中不同层次包围盒树中叶子节点中aabb以及obb都相交的情况下,我们对其中的所包含的三角形进行相交测试,测试时用obb的相关信息代替三角形的坐标值。

作为一种优选方案,步骤一中在计算节点中的包围盒时,先计算内层的obb,根据aabb与obb中点重合,利用obb的中点可以快速计算得到外层的aabb的信息。

作为一种优选方案,步骤二对内层的obb进行相交测试时,根据外层的aabb的相交结果和外层aabb包围obb的特点,只选取15条潜在分离轴{a0,a1,a2,b0,b1,b2,c00,c01,c02,c10,c11,c12,c20,c21,c22}中的五条分离轴{a0,b0,c22,c12,c21}进行粗略测试,其中ai和bj分别表示包围盒a和b的三条边的方向,下标值表示包围盒在此轴上的投影的大小关系,a0平行于包围盒a中最短的一条边,cij表示ai和bj的叉乘,若5条分离轴都不能确定obb分离,则判断obb之间相交。

作为一种优选方案,步骤三中对三角形进行相交测试时,直接使用三角形的坐标值进行测试需要将不在同一坐标系的三角形转换到同一坐标系下,根据obb相交测试得到的中间值,用这些中间值代替三角形的坐标进行相交测试。设待测的两个三角形分别为a和b,使用上述中间值替代后的坐标值为a1=(i1,0,0),a2=(a1,d1,0),a3=(0,0,0),b1=rx*i2+t,b2=rx*a2+ry*d2+t,b3=t。其中ii、di表示包围三角形的矩形的长和宽,ai可以在计算obb包围过程中得到,r[rx,ry,rz]和t[t1,t2,t3]分别表示将包围三角形的矩形变换到同一坐标系下的旋转矩阵和平移向量。

【有益效果】

与现有技术相比,本发明具有如下显著性进步和有益效果:

本发明技术方案通过设置双重包围盒的碰撞检测方法,利用简单的aabb之间的相交测试排除模型间隔距离较大的情况,当模型间隔距离较小且外层aabb相交时,利用aabb相交的结果优化obb之间的相交测试,减少obb相交测试的计算量可以提升整个包围盒相交测试过程的效率。在基本图元相交测试阶段,根据obb包围三角形的特点,利用obb之间相交测试所计算的中间值代替三角形的坐标值,省去了不同模型中的三角形坐标变换这一步骤可以提升方法中三角形相交测试阶段的效率。

四、附图说明

附图1基于混合层次包围盒的快速碰撞检测方法工作流程图

附图2待测物体的双重包围盒以及包围盒的闵可夫斯基和

五、具体实施方式

下面结合附图对本发明进一步说明。

一种基于混合层次包围盒的快速碰撞检测方法,包括如下步骤:

第一步,构建混合层次包围盒树(bvh):采用自顶向下的方法为虚拟环境中的每个模型构建层次包围盒树,树的结构为二叉树,树的每个节点中包含外层的aabb信息、内层的obb信息以及包含的三角形的坐标信息。方向包围盒obb是一个长方体,用一个中心点、一个旋转矩阵以及三个1/2边长来表示。本发明使用一种基于pca计算obb包围盒的方法,通过计算出模型中所有三角形点的协方差矩阵c,然后再得到c的三个特征向量即为obb的三条边的方向,最后根据模型中所有三角形顶点的在三条轴上的极值即可等到obb的三条边长。设模型中有n个三角形(pk,qk,rk),其中0≤k≤n,协方差矩阵如下:

其中ak和mk分别表示三角形k的面积和质心。其中模型的全面积以及质心:下标i和j表示采取的坐标分量(x,y,z)。外层的aabb通过扫描节点内的三角形的所有顶点在三条坐标轴上投影的最大最小值的顶点以及结合内层的obb包围盒的中点即可得到。

第二步,包围盒之间的相交测试:对不同层次包围盒树的节点中的包围之间进行相交测试,首先对根节点中的外层aabb进行相交测试,若aabb之间分离,则直接判断模型之间分离,反之对内层的obb进行相交测试,根据外层aabb相交的结果可以简化obb之间的相交测试只进行5条分离轴的相交测试。如图2所示,图2中的(a)表示两个模型a和b的外层aabb相交需要进一步检测其内层的obb,(b)表示这些包围盒的闵可夫斯基和。关于闵可夫斯基和,有如下定理:给定两个obb包围盒a和b,它们的闵可夫斯基和b∈b}是一个凸多面体,(a和b相交)等价其中p和q表示a和b的中心点,因此判断a和b是否相交,只需判断p(q)是否包含在沿向量-op(-oq)平移后的a和b的闵可夫斯基和内。

图2表明了在外层aabb相交的情况下,obb之间的分离轴的优先级与包围盒在轴上的投影长度的关系。左图(a)表示物体a和物体b的包围盒,右图(b)中白色区域的多边形是(a)中的两个obb的闵可夫斯基和,外面的矩形则为(a)中的aabb的闵可夫斯基和。由于图(a)中aabb相交,因此物体a(b)的包围盒的中点(obb和aabb中点重合)必定位于(b)中的矩形的某一点。当中点位于矩形中的白色区域时,a0、a1、b0、b1均不能作为obb之间的分离轴,物体a和b的obb之间相交;当中点位于矩形中的灰色区域时,a0或b0确定obb之间分离;当中点位于黑色区域时,a1或b1为obb之间的分离轴。根据图2(b)可知,黑色区域所占面积远远小于白色区域与灰色区域的和,因此可以确定在外层aabb相交的情况下,obb在轴上的投影越小则此轴作为分离轴的可能性越大。最后根据这些分离轴的优先级结合大量实践结果表明只测试{a0,b0,c22,c12,c21}五条潜在的分离轴时方法的效率最高。

第三步,三角形相交测试:在第二步中不同层次包围盒树中叶子节点中aabb以及obb都相交的情况,我们对其中的所包含的三角形进行相交测试,测试时用obb相交测试的中间值代替三角形的坐标值。待测的两个三角形分别为a和b,使用上述中间值替代后的坐标值为a1=(i1,0,0),a2=(a1,d1,0),a3=(0,0,0),b1=rx*i2+t,b2=rx*a2+ry*d2+t,b3=t。其中ii、di表示包围三角形的矩形的长和宽,ai可以在计算obb包围过程中得到,r[rx,ry,rz]和t[t1,t2,t3]分别表示将包围三角形的矩形变换到同一坐标系下的旋转矩阵和平移向量。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1