本发明涉及碰撞检测的,尤其是涉及一种模型的碰撞检测方法和装置。
背景技术:
1、在数字孪生系统中,虚拟模型之间的碰撞检测和碰撞交互至关重要,如果不进行碰撞检测,那么模型之间会发生互相穿透的现象,从而影响数字孪生系统的真实感和沉浸感。碰撞检测的实质是判断构成两个模型的三角面片之间是否相交,然而结构复杂的虚拟模型的三角面片的数量有几万到几十万不等,利用三角面片是否相交方式进行模型之间的碰撞检测时,计算量较大;另外一种常见的碰撞检测方法是将整个模型用一个球体,或一个长方体,或一个胶囊体等近似包围盒来表示,进而通过包围盒是否相交的方式进行模型之间的碰撞检测,但由于上述包围盒与模型的紧密性较差,而且数字孪生系统中的模型都极为不规则,仅利用包围盒是否相交的方式检测模型之间是否发生碰撞时,检测精度差(因为包围盒相交,模型不一定会发生碰撞)。
2、综上,传统的模型的碰撞检测方法存在检测精度差、计算量大的技术问题,无法应用于大规模数字孪生场景中的碰撞检测。
技术实现思路
1、有鉴于此,本发明的目的在于提供一种模型的碰撞检测方法和装置,以缓解现有的模型的碰撞检测方法存在检测精度差、计算量大的技术问题,无法应用于大规模数字孪生场景中的碰撞检测。
2、第一方面,本发明实施例提供了一种模型的碰撞检测方法,包括:
3、分别对每个待检测模型构建初始包围盒,并根据所述初始包围盒确定发生碰撞的至少一组目标初始包围盒,其中,一组所述目标初始包围盒包含两个所述初始包围盒;
4、并行对每组所述目标初始包围盒中的两个所述待检测模型执行以下碰撞检测的过程:
5、分别计算当前组所述目标初始包围盒中的两个所述初始包围盒的外接球的半径;
6、根据所述外接球的半径的比值对当前组所述目标初始包围盒中的两个所述初始包围盒进行同步或异步八叉树分层,并根据两个所述初始包围盒的中心点构成的向量与三个坐标轴的夹角确定两个所述初始包围盒各自保留的分层后的子包围盒,其中,所述三个坐标轴为所述初始包围盒的中心点与所述初始包围盒的共用同一顶点的三个相邻的面的中心点构成的坐标轴,两个所述分层后的子包围盒为最可能发生碰撞的区域;
7、判断两个所述分层后的子包围盒的最小边长是否都小于预设边长;
8、若不都小于,则将两个所述分层后的子包围盒作为当前组所述目标初始包围盒中的两个所述初始包围盒,返回执行分别计算当前组所述目标初始包围盒中的两个所述初始包围盒的外接球的半径的步骤,直至得到的两个所述分层后的子包围盒的最小边长都小于所述预设边长为止,得到两个所述分层后的子包围盒;
9、对两个所述分层后的子包围盒中的两个所述待检测模型的部分模型表面的三角面片进行细分,并以细分后的三角面片的顶点为球形体素的中心点,以所述细分后的三角面片的内切圆的半径为球形体素的半径构建球形体素;
10、采用所述球形体素是否相交的方式判断两个所述待检测模型之间是否发生碰撞。
11、进一步的,根据所述外接球的半径的比值对当前组所述目标初始包围盒中的两个所述初始包围盒进行同步或异步八叉树分层,并根据两个所述初始包围盒的中心点构成的向量与三个坐标轴的夹角确定两个所述初始包围盒各自保留的分层后的子包围盒,包括:
12、判断所述外接球的半径的比值是否小于预设阈值;
13、若小于所述预设阈值,则对当前组所述目标初始包围盒中的两个所述初始包围盒同时进行八叉树分层,并根据两个所述初始包围盒的中心点构成的向量与三个坐标轴的夹角确定两个所述初始包围盒各自保留的分层后的子包围盒;
14、若不小于所述预设阈值,则对当前组所述目标初始包围盒中的较大的所述初始包围盒进行八叉树分层,并根据两个所述初始包围盒的中心点构成的向量与三个坐标轴的夹角确定较大的所述初始包围盒保留的分层后的子包围盒,得到较大的所述初始包围盒的分层后的子包围盒,将较小的所述初始包围盒作为较小的所述初始包围盒的分层后的子包围盒。
15、进一步的,对两个所述分层后的子包围盒中的两个所述待检测模型的部分模型表面的三角面片进行细分,包括:
16、计算两个所述待检测模型的部分模型表面的三角面片的每条边的边长;
17、判断同一所述三角面片的每条边的边长是否都小于预设边长阈值;
18、若不都小于,则计算所述三角面片的内切圆与所述三角面片的各条边的切点;
19、连接所述切点对所述三角面片进行细分,得到第一细分后的三角面片;
20、判断同一所述第一细分后的三角面片的每条边的边长是否都小于所述预设边长阈值;
21、若不都小于,则将所述第一细分后的三角面片作为所述三角面片,返回执行计算所述三角面片的内切圆与所述三角面片的各条边的切点的步骤,直至得到的同一所述第一细分后的三角面片的每条边的边长都小于所述预设边长阈值为止,并将最后得到的所述第一细分后的三角面片作为所述细分后的三角面片。
22、进一步的,所述方法还包括:
23、若同一所述三角面片的每条边的边长都小于所述预设边长阈值,则将所述三角面片作为所述细分后的三角面片;
24、若同一所述第一细分后的三角面片的每条边的边长都小于所述预设边长阈值,则将所述第一细分后的三角面片作为所述细分后的三角面片。
25、进一步的,所述方法还包括:
26、在每次细分后,根据所述第一细分后的三角面片更新顶点的属性信息和三角面片的属性信息,其中,所述顶点的属性信息包括:顶点数组、三角形构成数组、顶点法线、顶点纹理坐标和顶点切线数组,所述三角面片的属性信息包括:三角面片的面法向量和顶点颜色。
27、进一步的,以细分后的三角面片的顶点为球形体素的中心点,以所述细分后的三角面片的内切圆的半径为球形体素的半径构建球形体素,包括:
28、对所述顶点数组中的顶点进行去重,得到去重后的顶点数组;
29、以所述去重后的顶点数组中的顶点为球形体素的中心点,以所述顶点对应的细分后的三角面片的内切圆的半径为球形体素的半径构建所述球形体素。
30、进一步的,采用所述球形体素是否相交的方式判断两个所述待检测模型之间是否发生碰撞,包括:
31、若所述球形体素相交,则两个所述待检测模型之间发生碰撞。
32、进一步的,所述方法还包括:
33、在下一次碰撞检测时,判断上一次碰撞检测时相交的两个所述球形体素的中心点所在的两个所述分层后的子包围盒是否发生碰撞;
34、若发生碰撞,则确定相交的两个所述球形体素的中心点在去重后的顶点数组中的索引值;
35、基于所述索引值确定一个所述待检测模型中的第一待检测球形体素和另一个所述待检测模型中的第二待检测球形体素,其中,所述第一待检测球形体素和所述第二待检测球形体素为中心点的索引值在范围内的球形体素,表示相交的两个所述球形体素的中心点在去重后的顶点数组中的索引值,表示预设值;
36、对所述第一待检测球形体素和所述第二待检测球形体素进行碰撞检测;
37、若检测到所述第一待检测球形体素和所述第二待检测球形体素未碰撞,则基于所述索引值确定一个所述待检测模型中的第三待检测球形体素和另一个所述待检测模型中的第四待检测球形体素,其中,所述第三待检测球形体素和所述第四待检测球形体素为中心点的索引值在和范围内的球形体素,表示相交的两个所述球形体素的中心点在去重后的顶点数组中的索引值,表示预设值;
38、对所述第一待检测球形体素和所述第四待检测球形体素、所述第二待检测球形体素和所述第三待检测球形体素、所述第三待检测球形体素和所述第四待检测球形体素进行碰撞检测;
39、若检测到所述第一待检测球形体素和所述第四待检测球形体素、所述第二待检测球形体素和所述第三待检测球形体素、所述第三待检测球形体素和所述第四待检测球形体素未碰撞,则确定两个所述待检测模型未碰撞。
40、进一步的,所述方法还包括:
41、若上一次碰撞检测时没有相交的两个所述球形体素,则返回执行根据所述初始包围盒确定发生碰撞的至少一组目标初始包围盒的步骤;
42、若上一次碰撞检测时相交的两个所述球形体素的中心点所在的两个所述分层后的子包围盒未发生碰撞,则将两个所述分层后的子包围盒向上还原一层,得到两个分层后的新子包围盒;
43、将两个所述分层后的新子包围盒作为当前组所述目标初始包围盒中的两个所述初始包围盒,返回执行分别计算当前组所述目标初始包围盒中的两个所述初始包围盒的外接球的半径的步骤。
44、第二方面,本发明实施例还提供了一种模型的碰撞检测装置,包括:
45、构建和确定单元,用于分别对每个待检测模型构建初始包围盒,并根据所述初始包围盒确定发生碰撞的至少一组目标初始包围盒,其中,一组所述目标初始包围盒包含两个所述初始包围盒;
46、碰撞检测单元,用于并行对每组所述目标初始包围盒中的两个所述待检测模型执行以下碰撞检测的过程:
47、分别计算当前组所述目标初始包围盒中的两个所述初始包围盒的外接球的半径;
48、根据所述外接球的半径的比值对当前组所述目标初始包围盒中的两个所述初始包围盒进行同步或异步八叉树分层,并根据两个所述初始包围盒的中心点构成的向量与三个坐标轴的夹角确定两个所述初始包围盒各自保留的分层后的子包围盒,其中,所述三个坐标轴为所述初始包围盒的中心点与所述初始包围盒的共用同一顶点的三个相邻的面的中心点构成的坐标轴,两个所述分层后的子包围盒为最可能发生碰撞的区域;
49、判断两个所述分层后的子包围盒的最小边长是否都小于预设边长;
50、若不都小于,则将两个所述分层后的子包围盒作为当前组所述目标初始包围盒中的两个所述初始包围盒,返回执行分别计算当前组所述目标初始包围盒中的两个所述初始包围盒的外接球的半径的步骤,直至得到的两个所述分层后的子包围盒的最小边长都小于所述预设边长为止,得到两个所述分层后的子包围盒;
51、对两个所述分层后的子包围盒中的两个所述待检测模型的部分模型表面的三角面片进行细分,并以细分后的三角面片的顶点为球形体素的中心点,以所述细分后的三角面片的内切圆的半径为球形体素的半径构建球形体素;
52、采用所述球形体素是否相交的方式判断两个所述待检测模型之间是否发生碰撞。
53、在本发明实施例中,提供了一种模型的碰撞检测方法,包括:分别对每个待检测模型构建初始包围盒,并根据初始包围盒确定发生碰撞的至少一组目标初始包围盒,其中,一组目标初始包围盒包含两个初始包围盒;并行对每组目标初始包围盒中的两个待检测模型执行以下碰撞检测的过程:分别计算当前组目标初始包围盒中的两个初始包围盒的外接球的半径;根据外接球的半径的比值对当前组目标初始包围盒中的两个初始包围盒进行同步或异步八叉树分层,并根据两个初始包围盒的中心点构成的向量与三个坐标轴的夹角确定两个初始包围盒各自保留的分层后的子包围盒,其中,三个坐标轴为初始包围盒的中心点与初始包围盒的共用同一顶点的三个相邻的面的中心点构成的坐标轴;判断两个分层后的子包围盒的最小边长是否都小于预设边长;若不都小于,则将两个分层后的子包围盒作为当前组目标初始包围盒中的两个初始包围盒,返回执行分别计算当前组目标初始包围盒中的两个初始包围盒的外接球的半径的步骤,直至得到的两个分层后的子包围盒的最小边长都小于预设边长为止,得到两个分层后的子包围盒;对两个分层后的子包围盒中的两个待检测模型的部分模型表面的三角面片进行细分,并以细分后的三角面片的顶点为球形体素的中心点,以细分后的三角面片的内切圆的半径为球形体素的半径构建球形体素;采用球形体素是否相交的方式判断两个待检测模型之间是否发生碰撞。通过上述描述可知,本发明的模型的碰撞检测方法中,通过对发生碰撞的且包含待检测模型的两个初始包围盒进行同步或异步八叉树分层的方式先确定最小边长都小于预设边长的两个分层后的子包围盒,且该两个分层后的子包围盒为最可能发生碰撞的区域,进而再对分层后的子包围盒中的两个待检测模型的部分模型表面的三角面片进行细分,然后以细分后的三角面片的顶点为球形体素的中心点,以细分后的三角面片的内切圆的半径为球形体素的半径构建球形体素,最后采用球形体素是否相交的方式进行两个待检测模型之间的碰撞检测,上述过程中,只对两个分层后的子包围盒中的两个待检测模型进行了碰撞检测(因为两个分层后的子包围盒所包围的区域为最可能发生碰撞的区域),其它不属于两个分层后的子包围盒中的待检测模型不予考虑,大大减小了执行碰撞检测的待检测模型的部分,也就是减少了后续碰撞检测的计算量;另外,在对两个分层后的子包围盒中的两个待检测模型进行碰撞检测时,对两个分层后的子包围盒中的部分模型表面的三角面片进行细分,并以细分后的三角面片为基础,通过构建球形体素并采用球形体素是否相交的方式进行的两个待检测模型之间的碰撞检测,准确性好,检测精度高,相较于传统的利用三角面片是否相交方式进行模型之间的碰撞检测的方式,本发明的方法计算量小,相较于传统的直接通过包围盒是否相交的方式进行模型之间的碰撞检测的方式,本发明的方法准确性好,精度高,也就是本发明的方法兼顾了碰撞检测的计算量和碰撞检测的精度,能对大规模数字孪生场景中的模型进行实时碰撞检测,缓解了传统的模型的碰撞检测方法存在检测精度差、计算量大的技术问题,无法应用于大规模数字孪生场景中的碰撞检测。
1.一种模型的碰撞检测方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,根据所述外接球的半径的比值对当前组所述目标初始包围盒中的两个所述初始包围盒进行同步或异步八叉树分层,并根据两个所述初始包围盒的中心点构成的向量与三个坐标轴的夹角确定两个所述初始包围盒各自保留的分层后的子包围盒,包括:
3.根据权利要求1所述的方法,其特征在于,对两个所述分层后的子包围盒中的两个所述待检测模型的部分模型表面的三角面片进行细分,包括:
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
6.根据权利要求5所述的方法,其特征在于,以细分后的三角面片的顶点为球形体素的中心点,以所述细分后的三角面片的内切圆的半径为球形体素的半径构建球形体素,包括:
7.根据权利要求1所述的方法,其特征在于,采用所述球形体素是否相交的方式判断两个所述待检测模型之间是否发生碰撞,包括:
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
10.一种模型的碰撞检测装置,其特征在于,包括:
