一种基于凸包和预判断的混合碰撞检测方法
文献发布时间:2023-06-19 11:39:06
技术领域
本发明涉及工业自动化虚拟仿真领域,更具体地涉及一种基于凸包和预判断的混合碰撞检测方法。
背景技术
碰撞检测就是检测虚拟场景中不同对象之间是否发生了碰撞。如果直接对物体几何元素之间进行碰撞检测的遍历,当物体结构很复杂或者物体数量很多时,计算复杂程度极高,在计算速度上是不允许的,达不到虚拟环境中所要求的实时性要求,也不能做到环境与用户的实时交互。碰撞检测算法的实质就是在实时性和精确性之间达到平衡。目前已有多种碰撞检测的方法,主要有包围盒层次法和空间分割法两大类。其中层次包围盒算法由于构造简单且检测更精确,被广泛应用。它的核心思想是用体积略大而几何特性简单的包围盒来代替复杂的几何对象,通过构造层次树并对其进行遍历来确定物体的相交状态。最常用的三大包围盒是球包围盒(SBB)、轴对齐包围盒(AABB)、有向包围盒(OBB)。SBB构造简单、相交测试简单,但是紧密性太差;AABB构造简单、相交测试较为简单,紧密性差;而OBB构造复杂、相交测试复杂。但是紧密性是比较好的。
针对工业场景中的物体模型,一部分物体模型近似球体,采用SBB包围盒即可,一部分物体模型是轴对称结构的,采用AABB包围盒即可满足碰撞检测精度要求;而还有一部分物体模型是不规则的,需采用OBB包围盒才能满足碰撞检测精度要求。
现有的混合包围盒算法中,大部分是对某一固定模型采用AABB包围盒,而对另一固定模型采用OBB包围盒;或者固定在层次包围盒树顶层使用AABB包围盒或包围球,而在其他层使用OBB包围盒。现有的这些方法不够灵活,不能利用模型本身形状特点给模型选择合适的包围盒。
发明内容
为了就解决现有技术中存在的上述不足,本发明提出一种基于凸包与预判断的混合碰撞检测方法,能够根据模型的凸包,自适应地选择采用AABB包围盒、OBB包围盒或者球包围盒,并且在相交检测阶段应用不同类型包围盒之间的相交预判断方法,快速排除不相交的情况,以进一步提高虚拟仿真中实时碰撞检测的效率,其具体技术方案如下:
一种基于凸包和预判断的混合碰撞检测方法,包括如下步骤:
第一步,设定偏球阈值和倾斜夹角阈值;
第二步,使用快速凸包算法计算模型的凸包,根据模型的凸包来计算包围盒的中心位置o,根据偏球率公式计算模型偏球率p;
第三步,当偏球率p小于偏球阈值时,采用SBB包围盒;否则计算模型的倾斜夹角θ,倾斜夹角θ如果小于倾斜夹角阈值则选择AABB包围盒;当倾斜夹角θ大于倾斜夹角阈值时,选择OBB包围盒;
第四步,对所述包围盒之间进行相交测试。
进一步的,所述第一步中的偏球阈值设置为1/7,倾斜夹角阈值设置为10°。
进一步的,所述第二步中包围盒的中心位置o计算公式如下:
其中q
所述模型偏球率p的计算公式如下:
其中n代表模型凸包顶点集中的顶点数,(x
进一步的,所述第三步中模型倾斜夹角θ的计算方法如下:
将模型的凸包顶点集分别投影到以XOY三个坐标的平面,采用向量夹角法计算模型在投影平面中与该投影平面内两坐标轴的夹角,选取夹角最大的作为模型的倾斜夹角,具体的:设在XOY平面内投影模型沿X轴上的最大值顶点是A(x
同理求得与Y轴方向夹角或其余平面中的夹角,选择其中最大夹角作为模型的倾斜夹角θ。
进一步的,所述第四步具体为:对于SBB包围盒与SBB包围盒相交测试,比较球心距离与两个包围盒半径之和;对于AABB包围盒与AABB包围盒相交测试、OBB包围盒与OBB包围盒或者AABB包围盒相交测试,分别使用各自的相交预判断方法,预先排除一定不相交情况;对于不能预先排除的情况,采用分离轴相交测试方法来判断。
进一步的,所述对于AABB包围盒与AABB包围盒相交测试,具体为:
设o
所述对于OBB包围盒与OBB包围盒或AABB包围盒相交测试,具体为:
当下述公式为真时,则两个包围盒不相交,公式具体如下:
相较于现有技术,本发明具有以下良好效果:
1、本发明能够基于模型的凸包特征,选择合适包围盒类型,构造出的包围盒紧密性更好。
2、本发明在相交测试阶段,加入不同类型包围盒之间的相交预判断方法,快速排除不相交的情况,能提高相交测试效率。
附图说明
图1是基于凸包和预判断的混合碰撞检测流程图;
图2是AABB-AABB相交预判断示意图;
图3是OBB-OBB/AABB相交预判断示意图。
具体实施方式
为了使本发明的目的、技术方案和技术效果更加清楚明白,下面结合说明书附图,对本发明作进一步详细说明。
如图1所示,一种基于凸包和预判断的混合碰撞检测方法,包括如下步骤:
第一步,设定偏球阈值和倾斜夹角阈值;
第二步,计算模型凸包以及偏球率:使用快速凸包算法计算模型的凸包,根据模型的凸包来计算包围盒的中心位置o,根据偏球率公式计算模型偏球率p;
第三步,构造包围盒:当偏球率p小于偏球阈值时,则采用SBB包围盒,计算中心位置o到模型凸包顶点集中最远的距离作为SBB包围盒的半径r;否则将计算模型的倾斜夹角θ,倾斜夹角θ如果小于倾斜夹角阈值则选择AABB包围盒,根据模型凸包构造AABB包围盒;当倾斜夹角θ大于倾斜夹角阈值时,则选择OBB包围盒,根据模型凸包顶点数据计算协方差矩阵,将协方差矩阵特征向量并且单位化作为模型的三个方向轴,将模型凸包顶点集投影到模型的三个方向轴上,计算OBB的在三个方向轴上的三个1/2边长;
第四步,包围盒之间的相交测试:对于SBB包围盒与SBB包围盒相交测试,比较球心距离与两个包围盒半径之和;对于AABB包围盒与AABB包围盒相交测试、OBB包围盒与OBB包围盒或者AABB包围盒相交测试,分别使用各自的相交预判断方法,预先排除一定不相交情况;对于不能预先排除的情况,采用分离轴相交测试方法来判断。
如图2和3所示,表明了二维情况下AABB包围盒以及OBB包围盒之间的相交预判断情况。
具体的,图2表示两个包围盒都是AABB包围盒相交预判断的情况,其中o
图3表示OBB包围盒与OBB包围盒或AABB包围盒相交预判断的情况。当下述公式为真时,则确定两个包围盒不相交,公式具体如下:
通常的,所述第一步中偏球阈值设置为1/7,倾斜夹角阈值设置为10°。
所述第二步中包围盒的中心位置o计算公式如下:
其中q
所述第二步中模型偏球率p的计算公式如下:
其中n代表模型凸包顶点集中的顶点数,(x
所述第三步中模型倾斜夹角θ的计算方法如下:
将模型的凸包顶点集分别投影到三个坐标平面,采用向量夹角法计算模型在投影平面中与该投影平面内两坐标轴的夹角,选取夹角最大的作为模型的倾斜夹角。
以XOY平面内的模型投影为例,假设在XOY平面内投影模型沿X轴上的最大值顶点是A(x
有上式可以求得与X轴方向夹角,同理可以求得与Y轴方向夹角或其余平面中的夹角,选择最大夹角作为模型的倾斜夹角θ。
- 一种基于凸包和预判断的混合碰撞检测方法
- 一种基于直线投影的凸多面体碰撞检测方法