CN112825199A - 碰撞检测方法、装置、设备及存储介质 - Google Patents
碰撞检测方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112825199A CN112825199A CN201911142244.2A CN201911142244A CN112825199A CN 112825199 A CN112825199 A CN 112825199A CN 201911142244 A CN201911142244 A CN 201911142244A CN 112825199 A CN112825199 A CN 112825199A
- Authority
- CN
- China
- Prior art keywords
- collision
- model
- data
- collision detection
- node
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/005—Tree description, e.g. octree, quadtree
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/04—Indexing scheme for image data processing or generation, in general involving 3D image data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/21—Collision detection, intersection
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- Architecture (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Image Analysis (AREA)
Abstract
本申请一种碰撞检测方法,包括:获取场景数据,根据所述场景数据中的各实体数据建立碰撞检测模型;由所建立的两个以上的碰撞检测模型中提取出当前需要进行碰撞检测的第一碰撞模型和第二碰撞模型;由所述第一碰撞模型的首层节点和所述第二碰撞模型的首层节点开始,逐层对所述第一碰撞模型和所述第二碰撞模型中处于同一层节点的包围盒之间的距离进行计算,并根据计算得到的距离结果得到相应的碰撞检测结果。其通过对场景数据中的各实体建立相应的碰撞检测模型,所建立的碰撞检测模型均采用二叉树的数据结构,同时各碰撞检测模型中每层节点所包含的包围盒的数据均量化为整型数据,从而在保证精度的同时降低了内存占用量。
Description
技术领域
本公开涉及3D建模技术领域,尤其涉及一种碰撞检测方法、装置、设备及存储介质。
背景技术
碰撞检测在所有涉及到3D建模的游戏、科研和工作领域都有着无可避免的广泛应用。关于碰撞检测的建模也是各式各样,球形、胶囊体、轴对称包围盒、定向包围盒等。但是目前大多数的碰撞检测引擎在精度达到需求的算法时,往往会导致内存占比较大。
发明内容
有鉴于此,本公开提出了一种碰撞检测方法,可以有效减少内存占用量。
根据本公开的一方面,提供了一种碰撞检测方法,包括:
获取场景数据,根据所述场景数据中的各实体数据建立碰撞检测模型;
其中,所述碰撞检测模型的个数为两个以上,两个以上的所述碰撞检测模型与所述场景数据中的实体相对应;且
所述碰撞检测模型的数据结构为二叉树结构;各所述碰撞检测模型中每层节点中的包围盒中的数据均为整型数据;
由所建立的两个以上的碰撞检测模型中提取出当前需要进行碰撞检测的第一碰撞模型和第二碰撞模型;
由所述第一碰撞模型的首层节点和所述第二碰撞模型的首层节点开始,逐层对所述第一碰撞模型和所述第二碰撞模型中处于同一层节点的包围盒之间的距离进行计算,并根据计算得到的距离结果得到相应的碰撞检测结果。
在一种可能的实现方式中,根据所述场景数据中的各实体数据建立碰撞检测模型,包括:
由所述场景数据中读取各实体数据中的点数据和三角面索引;
基于所述点数据和所述三角面索引,建立各实体所对应的原始碰撞树;
对所述原始碰撞树进行优化,得到所述碰撞检测模型;
其中,对所述原始碰撞树进行优化,包括节点收敛和数据量化中的至少一种:
所述节点收敛,包括:
收敛所述原始碰撞树中的叶节点,以叶节点包含的三角面索引替代在根节点中的指针,并将所述原始碰撞树中的当前叶节点所包含的三角形收录到当前节点的上一层节点中;
所述数据量化,包括:
获取所述原始碰撞树中各层节点的包围盒的数据,通过量化方式将所述原始碰撞树中各层节点的包围盒的数据由浮点型数据转换为整型数据。
在一种可能的实现方式中,基于所述点数据和所述三角面索引,建立各实体所对应的原始碰撞树,包括:
基于所述点数据和所述三角面索引,建立各所述实体的三维模型;
对各所述三维模型的包围盒进行至少一次空间分割,得到多个包围盒,并根据得到的多个所述包围盒建立所述原始碰撞树;
其中,对各所述三维模型的包围盒进行至少一次空间分割,包括:
获取所述三维模型的包围盒在三维坐标系中的最长轴,按照所述最长轴方向对所述三维模型的包围盒进行初级分割,得到多个一级包围盒;
根据各所述一级包围盒内的三角形个数以及预设个数的大小关系,基于各所述一级包围盒进行逐级分割,直至分割后得到的包围盒内的三角形个数小于或等于预设个数为止;
其中,在按照所述最长轴方向不能对所述三维模型的包围盒进行初级分割时,按照次长轴方向对所述三维模型的包围盒进行初级分割;
在对所述三维模型的包围盒进行分割时,分割位置通过遍历所述包围盒内所有三角形,获取沿分割方向上的极大值和极小值并对所述极大值和所述极小值进行平均值计算的方式得到;
所述预设个数的取值为2。
在一种可能的实现方式中,根据计算得到的距离结果得到相应的碰撞检测结果,包括:
在所述距离结果均大于预设数值时,确定所述碰撞检测结果为未碰撞;
在所述距离结果中存在小于或等于所述预设数值的结果时,获取所述第一碰撞模型中当前节点所包含的第一包围盒和所述第二碰撞模型中当前节点所包含的第二包围盒,并基于所述第一包围盒内的三角形和所述第二包围盒内的三角形进行三角形碰撞检测,得到相应的碰撞检测结果;
其中,所述当前节点为小于或等于所述预设数值的距离结果所对应的节点;所述预设数值的取值为2。
在一种可能的实现方式中,基于所述第一包围盒内的三角形和所述第二包围盒内的三角形进行三角形碰撞检测,包括:
依次由所述第一包围盒内选取第一三角形,并由所述第二包围盒内选取第二三角形;其中,所述第一三角形为所述第一包围盒内的所有三角形中的任意一个,所述第二三角形为所述第二包围盒内的所有三角形中的任意一个;
运用离合轴定理对当前选取出的所述第一三角形和所述第二三角形进行三角形碰撞检测。
在一种可能的实现方式中,在所述距离结果中存在小于或等于所述预设数值时,还包括:
确定所述距离结果所对应的当前节点是否为叶节点;
在所述当前节点为叶节点时,获取所述第一碰撞模型中当前节点所包含的第一包围盒和所述第二碰撞模型中当前节点所包含的第二包围盒,并基于所述第一包围盒内的三角形和所述第二包围盒内的三角形进行三角形碰撞检测,得到相应的碰撞检测结果;
在所述当前节点为根节点时,对所述第一碰撞模型和所述第二碰撞模型中当前节点的下一层节点包含的包围盒之间的距离进行计算。
根据本公开的另一方面安,还提供了一种碰撞检测装置,包括模型建立模块、模型提取模块和碰撞检测模块;
所述模型建立模块,被配置为获取场景数据,根据所述场景数据中的各实体数据建立碰撞检测模型;
其中,所述碰撞检测模型与所述场景数据中的实体相对应;且
所述碰撞检测模型的数据结构为二叉树结构;各所述碰撞检测模型中每层节点中的包围盒中的数据均为整型数据;
所述模型提取模块,被配置为由所建立的碰撞检测模型中提取第一碰撞模型和第二碰撞模型;
所述碰撞检测模块,被配置为由所述第一碰撞模型的首层节点和所述第二碰撞模型的首层节点开始,逐层对所述第一碰撞模型和所述第二碰撞模型中处于同一层节点的包围盒之间的距离进行计算,并根据计算得到的距离结果得到相应的碰撞检测结果。
在一种可能的实现方式中,所述模型建立模块包括数据读取子模块、原始树建立子模块和原始树优化子模块;
所述数据读取子模块,被配置为由所述场景数据中读取各实体数据中的点数据和三角面索引;
所述原始树建立子模块,被配置为基于所述点数据和所述三角面索引,建立各实体所对应的原始碰撞树;
所述原始树优化子模块,被配置为对所述原始碰撞树进行优化,得到所述碰撞检测模型;
其中,所述原始树优化子模块包括节点收敛单元和数据量化单元;
所述节点收敛单元,被配置为收敛所述原始碰撞树中的叶节点,以叶节点包含的三角面索引替代在根节点中的指针,并将所述原始碰撞树中的当前叶节点所包含的三角形收录到当前节点的上一层节点中;
所述数据量化单元,被配置为获取所述原始碰撞树中各层节点的包围盒的数据,通过量化方式将所述原始碰撞树中各层节点的包围盒的数据由浮点型数据转换为整型数据。
根据本公开的一方面,还提供了一种碰撞检测设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述可执行指令时实现前面任一所述的方法。
根据本公开的另一方面,还提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时前面任一所述的方法。
本申请的碰撞检测方法,通过对场景数据中的各实体建立相应的碰撞检测模型,所建立的碰撞检测模型均采用二叉树的数据结构,同时各碰撞检测模型中每层节点所包含的包围盒的数据均量化为整型数据,从而在保证精度的同时降低了内存占用量。并且,还通过采用计算两个碰撞检测模型在同一层节点所包含的包围盒之间的距离来实现对两个碰撞检测模型的碰撞检测,检测方式简便,易于实现。
根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
图1示出本申请的碰撞检测方法的一实施例的流程图;
图2示出本申请的碰撞检测方法中所建立的一个实体的原始碰撞树的数据结构图;
图3示出本申请的碰撞检测方法中所建立的第一碰撞模型的部分数据结构图;
图4示出本申请的碰撞检测方法中所建立的第二碰撞模型的部分数据结构图;
图5示出本申请的碰撞检测装置的结构框图;
图6示出本申请的碰撞检测设备的结构框图。
具体实施方式
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
图1示出根据本公开一实施例的碰撞检测方法的流程图。如图1所示,该方法包括:步骤S100,获取场景数据,根据场景数据中的各实体数据建立碰撞检测模型。其中,需要指出的是,参阅图2,在本申请方法中,对于场景数据中的每一个实体所建立的碰撞检测模型的数据结构均为二叉树结构。并且,对于一个场景数据可建立两个以上的碰撞检测模型,两个以上的碰撞检测模型与场景数据中的多个实体一一对应。即,场景数据中包含多少实体,对应就会建立多少个碰撞检测模型。同时,在本申请方法中,各碰撞检测模型中每层节点所包含的包围盒的数据均为整型数据。
步骤S200,由所建立的两个以上的碰撞检测模型中提取出当前需要进行碰撞检测的第一碰撞模型和第二碰撞模型。此处,本领域技术人员可以理解的是,第一碰撞模型和第二碰撞模型均为所建立的两个以上的碰撞检测模型中的任意一个,并且第一碰撞模型与第二碰撞模型分别对应不同的实体。同时,还需要指出的是,由两个以上的碰撞检测模型中提取出第一碰撞模型和第二碰撞模型时,可以按照一定的顺序依次进行提取,也可以通过两两组合的方式进行提取,此处不进行具体限定。
步骤S300,由第一碰撞模型的首层节点和第二碰撞模型的首层节点开始,逐层对第一碰撞模型和第二碰撞模型中处于同一层节点的包围盒之间的距离进行计算,并根据计算得到的距离结果得到相应的碰撞检测结果。即,通过对提取出的第一碰撞模型和第二碰撞模型中,处于同一层节点所包含的包围盒之间的距离进行计算来实现对第一碰撞模型所对应的实体与第二碰撞模型所对应的实体的碰撞检测。
由此,本申请的碰撞检测方法,通过对场景数据中的各实体建立相应的碰撞检测模型,所建立的碰撞检测模型均采用二叉树的数据结构,同时各碰撞检测模型中每层节点所包含的包围盒的数据均量化为整型数据,从而在保证精度的同时降低了内存占用量。并且,还通过采用计算两个碰撞检测模型在同一层节点所包含的包围盒之间的距离来实现对两个碰撞检测模型的碰撞检测,检测方式简便,易于实现。
在一种可能的实现方式中,根据场景数据中的各实体数据建立碰撞检测模型时,可以通过以下方式来实现。首先,由场景数据中读取各实体数据中的点数据和三角面索引。进而再基于读取到的点数据和三角面索引建立各实体所对应的原始碰撞树。然后,再对建立好的原始碰撞树进行优化即可得到碰撞检测模型。
此处,需要说明的是,基于所读取到的点数据和三角面索引建立相应的原始碰撞树的过程可基于空间分割的方式来实现。在基于空间分割的方式建立相应的原始碰撞树时,可以先基于所读取到的点数据和三角面索引建立实体的三维模型。进而对各三维模型的包围盒进行至少一次空间分割,得到多个包围盒,并根据得到的多个包围盒建立原始碰撞树。
其中,在对三维模型的包围盒进行至少一次空间分割时,首先获取三维模型的包围盒在三维坐标系中的最长轴,以获取到的最长轴作为分割轴,按照最长轴方向对三维模型的包围盒进行初级分割,得到多个一级包围盒。然后,根据各一级包围盒内的三角形个数以及预设个数的大小关系,基于各一级包围盒进行逐级分割,直至分割后得到的包围盒内的三角形个数小于或等于预设个数为止。
此处,本领域技术人员可以理解的是,在对三维模型的包围盒进行空间分割时,所分割的包围盒即为原始碰撞树的首层节点。分割后所得到的多个一级包围盒即为原始碰撞树的第二层节点。依此类推,最终分割后所得到的位于原始碰撞树的末层节点的包围盒内的三角形个数不大于预设个数。
其中,需要指出的是,在一种可能的实现方式中,预设个数的取值可以设置为2。并且,还需要说明的是,预设个数的取值也可以根据实际情况进行适应性修改,设置为其他数值,此处不再进行具体限定。
参阅图2,为在本申请的碰撞检测方法中对某一场景数据中的其中一个实体的三维模型进行空间分割后所建立的原始碰撞树的示例。其中,在该示例中,首层节点的包围盒中三角形个数为100个,第二层节点中每个包围盒中三角形个数分别为50个,第三层节点中每个包围盒中三角形个数分别25个,依此类推,直至末层节点(即,第N层节点)中每个包围盒的三角形个数不大于3个为止。
另外,在一种可能的实现方式中,在逐级对三维模型的包围盒进行空间分割过程中,当以获取到的最长轴为分割轴,按照最长轴方向不能对包围盒进行有效分割,并且此时包围盒内的三角形个数大于预设个数时,则以次长轴作为分割轴,按照次长轴方向对包围盒进行分割。
另外,在上述基于空间分割的方式建立原始碰撞树时,在对三维模型的包围盒进行逐级分割过程中,每一次分割时的分割位置可以通过遍历包围盒内所有三角形,获取沿分割方向上的极大值和极小值,并对极大值和极小值进行平均值计算的方式得到。此处,需要指出的是,所获取到的极大值和极小值指的是通过遍历各三角形的三个顶点在沿分割方向上坐标值,由各坐标值中选取出的最大值和最小值。如:分割方向为沿x轴方向时,极大值和极小值为对某一特定三角形的三个顶点的x坐标上的最大值和最小值。
如:在当前次的分割过程中,对于其中一个包围盒A’,其包含有四个三角形,分别为:Δ1,Δ2,Δ3和Δ4。通过遍历Δ1、Δ2、Δ3和Δ4,获取到在杨分割方向上的极大值和极小值分别为x1和x2,由此可按照公式:计算确定相应的分割位置。
在按照上述任一种方式建立原始碰撞树之后,即可对原始碰撞树进行优化,得到相应的碰撞检测模型。在一种可能的实现方式中,对原始碰撞树进行优化可以包括节点收敛和数据量化中的至少一种。
其中,节点收敛可以通过以下方式来实现。即,收敛原始碰撞树中的叶节点,以叶节点包含的三角面索引替代在根节点中的指针,并将原始碰撞树中的当前叶节点所包含的三角形收录到当前节点的上一层节点中。通过以叶节点所含的三角面索引替代6其自己在根节点中的指针,节点数量从2n-1降低到n-1,内存占用降低一半左右。此处,本领域技术人员可以理解的是,n表征原始碰撞树中叶节点的数量。同时,还通过将原叶节点所含三角形收录到上一层节点中,进一步减少了内存占用,同时因为少了一层包围盒,对包围盒的检测并不影响速度。
数据量化则可以通过以下方式来实现。即,获取原始碰撞树中各层节点的包围盒数据,并通过量化方式将原始碰撞树中各层节点的包围盒的数据由浮点型数据转换为整型数据。此处,需要说明的是,量化方式可以采用根据点数据的特性利用乘法将原有的数据进行扩大,只要确保不超出int型限制,在去掉小数位的同时保证精度不会变化太大即可。其中,需要指出的是,在根据点数据的特性利用乘法对原始碰撞树中各层节点的包围盒数据进行整型转换后,在后续计算时,再采用量化方式的反向运算(即,乘以量化因子的倒数)来得到量化前的浮点型数据进行计算,以提高碰撞检测的精确度。
进一步的,在一种可能的实现方式中,数据量化方式还可以采用四舍五入的方式进行整型量化。
举例来说,对于一个包围盒AB,其在原始碰撞树中的数据包括:max(22.21,21.05,5.33);min(0.02,0.03,0.04)。通过采用四舍五入的方式对其进行整型量化后,得到AB的数据为:max(22,21,5);min(0,0,0)。由此即可实现采用int值替代float来来实现包围盒数据的记录。量化方式简单,易于实现。
通过采用上述方式对原始碰撞树进行优化后,使得优化后的原始碰撞树(即,碰撞检测模型)中的根节点包围盒大小覆盖整个实体,上层节点包围盒覆盖自身所含的下层节点。
在通过上述任一种方式对场景数据中各实体建立相应的碰撞检测模型后,即可进行任意两个碰撞检测模型的碰撞检测。其中,在进行任意两个碰撞检测模型的碰撞检测时,可以通过两两组合的方式进行分组,每两个设置为一组。对于每一组碰撞检测模型的碰撞检测可以并行执行,从而进一步地提高碰撞检测的速率。
进一步地,在进行碰撞检测时,首先由所建立的多个碰撞检测模型中提取出当前需要进行碰撞检测的第一碰撞模型和第二碰撞模型。其中,在第一碰撞模型和第二碰撞模型的提取时可以根据当前接收到的实体数据中的id进行提取。
更进一步地,对第一碰撞模型和第二碰撞模型进行碰撞检测时,可以通过由第一碰撞模型的首层节点和第二碰撞模型的首层节点开始,逐层对第一碰撞模型和第二碰撞模型中处于同一层节点的包围盒之间的距离进行计算,并根据计算得到的距离结果得到相应的碰撞检测结果。
此处,需要指出的是,在本申请中对第一碰撞模型和第二碰撞模型中处于同一层节点的包围盒之间的距离计算可以通过对包围盒的三角面对三角面之间的距离计算来实现。即,包围盒之间的距离计算可以采用本领域的常规技术手段来实现,因此此处不再赘述。
需要进一步说明的是,在通过计算包围盒之间的距离来进行碰撞检测结果的确定时,由于处于同一层节点处的包围盒的个数可能会在两个以上,因此得到的距离结果可能会有多个。因此,在根据计算得到的距离结果得到相应的碰撞检测结果时,可以根据所得到的距离结果中是否存在小于或等于预设数值的结果来进行碰撞检测结果的确定。
即,在所得到的距离结果均大于预设数值时,则可以确定当前正在进行碰撞检测的第一碰撞模型与第二碰撞模型不会出现接触的情况,因此可直接得到碰撞检测结果为未碰撞。
在所得到的距离结果中存在小于或等于预设数值的结果时,则表明第一碰撞模型与第二碰撞模型可能会出现接触,因此还需要进行进一步的检测。即,获取第一碰撞模型中当前节点所包含的第一包围盒和第二碰撞模型中当前节点所包含的第二包围盒,并基于第一包围盒内的三角形和第二包围盒内的三角形进行三角形碰撞检测,以得到相应的碰撞检测结果。此处,本领域技术人员可以理解,当前节点为小于或等于预设数值的距离结果所对应的节点。其中,预设数值的取值可以设置为2。
进一步地,基于第一包围盒内的三角形和第二包围盒内的三角形进行三角形碰撞检测,可以通过以下方式来实现。即,依次由第一包围盒内选取第一三角形,并由第二包围盒内选取第二三角形;其中,第一三角形为第一包围盒内的所有三角形中的任意一个,第二三角形为所述第二包围盒内的所有三角形中的任意一个。进而,再运用离合轴定理对当前选取出的第一三角形和第二三角形进行三角形碰撞检测。
更进一步地,在一种可能的实现方式中,根据计算得到的距离结果得到相应的碰撞检测结果过程中,当判断出距离结果中存在小于或等于预设数值的距离结果时,还包括确定距离结果所对应的当前节点是否为叶节点的步骤。
即,确定存在小于或等于预设数值的距离结果所对应的节点是否为叶节点。在确定出当前节点为叶节点时,再获取第一碰撞模型中当前节点所包含的第一包围盒和第二碰撞模型中当前节点所包含的第二包围盒,并基于第一包围盒内的三角形和第二包围盒内的三角形进行三角形碰撞检测,得到相应的碰撞检测结果。
在确定出当前节点为根节点时,表明当前节点还存在下一层节点,此时可继续对第一碰撞模型和第二碰撞模型中当前节点的下一层节点包含的包围盒之间的距离进行计算。
举例来说,参阅图3和图4,第一碰撞模型为A,第二碰撞模型为B,其中,对第一碰撞模型A和第二碰撞模型B进行包围盒间的距离计算,以进行第一碰撞模型A和第二碰撞模型B的碰撞检测。在对第一碰撞模型A中的当前节点A0和第二碰撞模型B中的当前节点B0之间的距离进行计算得到A0B0的结果小于2时,由此节点A0和节点B0均为根节点,因此此时直接对节点A0和节点B0的下一层节点继续进行距离计算。
其中,节点A0的下一层节点包括节点A1和节点A2,节点B0的下一层节点包括节点B1和节点B2,由此通过距离的计算得到的距离结果包括:A1B1>2,A1B2>2,A2B1>2和A2B2<2。在本实施例中计算出的距离结果中存在小于2的距离结果(即,A2B2)。同时,判断节点A2和节点B2是否为叶节点。在判断出节点A2和节点B2为叶节点后,此时获取节点A2和节点B2所包含的三角形。其中,节点A2的包围盒所包含的三角形包括Δ01(A)和Δ02(A);节点B2的包围盒包含的三角形包括Δ01(B)和Δ01(B)。通过采用离合轴定理,分别对Δ01(A)和Δ01(B)、Δ01(A)和Δ02(B)、Δ02(A)和Δ01(B)、以及Δ02(A)和Δ02(B)进行三角形碰撞检测。在检测出的结果为碰撞时,返回true,结束计算。此处,需要说明的是,运用离合轴定理对两个三角形进行碰撞检测为本领域常规技术手段,因此此处不再进行赘述。
由此,本申请的碰撞检测方法通过采用空间分割的方式对场景数据中的各实体建立相应的原始碰撞树,并对建立的原始碰撞树进行节点收敛和数据量化以实现对原始碰撞树的优化,从而达到减少内存占用的目的。并通过逐层计算两个碰撞检测模型中处于同一层节点的包围盒之间的距离来实现对两个碰撞检测模型的碰撞检测,进一步提高了碰撞检测结果的准确度。
相应的,基于前面任一所述的碰撞检测方法,本申请还提供了一种碰撞检测装置。由于本申请提供的碰撞检测装置的工作原理与本申请的碰撞检测方法的原理相同或相似,因此重复之处不再赘述。
参阅图5,本申请的碰撞检测装置100包括模型建立模块110、模型提取模块120和碰撞检测模块130。其中,模型建立模块110,被配置为获取场景数据,根据场景数据中的各实体数据建立碰撞检测模型。此处,需要指出的是,碰撞检测模型与场景数据中的实体相对应;且碰撞检测模型的数据结构为二叉树结构;各碰撞检测模型中每层节点中的包围盒中的数据均为整型数据。
模型提取模块120,被配置为由所建立的碰撞检测模型中提取第一碰撞模型和第二碰撞模型。碰撞检测模块130,被配置为由第一碰撞模型的首层节点和第二碰撞模型的首层节点开始,逐层对第一碰撞模型和第二碰撞模型中处于同一层节点的包围盒之间的距离进行计算,并根据计算得到的距离结果得到相应的碰撞检测结果。
在一种可能的实现方式中,模型建立模块110包括数据读取子模块、原始树建立子模块和原始树优化子模块(图中未示出)。其中,数据读取子模块,被配置为由场景数据中读取各实体数据中的点数据和三角面索引。原始树建立子模块,被配置为基于点数据和三角面索引,建立各实体所对应的原始碰撞树。原始树优化子模块,被配置为对原始碰撞树进行优化,得到碰撞检测模型。其中,原始树优化子模块包括节点收敛单元和数据量化单元。节点收敛单元,被配置为收敛原始碰撞树中的叶节点,以叶节点包含的三角面索引替代在根节点中的指针,并将原始碰撞树中的当前叶节点所包含的三角形收录到当前节点的上一层节点中。数据量化单元,被配置为获取原始碰撞树中各层节点的包围盒的数据,通过量化方式将原始碰撞树中各层节点的包围盒的数据由浮点型数据转换为整型数据。
更进一步地,根据本公开的另一方面,还提供了一种碰撞检测设备200。参阅图6,本公开实施例碰撞检测设备200包括处理器210以及用于存储处理器210可执行指令的存储器220。其中,处理器210被配置为执行可执行指令时实现前面任一所述的碰撞检测方法。
此处,应当指出的是,处理器210的个数可以为一个或多个。同时,在本公开实施例的碰撞检测设备200中,还可以包括输入装置230和输出装置240。其中,处理器210、存储器220、输入装置230和输出装置240之间可以通过总线连接,也可以通过其他方式连接,此处不进行具体限定。
存储器220作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序和各种模块,如:本公开实施例的碰撞检测方法所对应的程序或模块。处理器210通过运行存储在存储器220中的软件程序或模块,从而执行碰撞检测设备200的各种功能应用及数据处理。
输入装置230可用于接收输入的数字或信号。其中,信号可以为产生与设备/终端/服务器的用户设置以及功能控制有关的键信号。输出装置240可以包括显示屏等显示设备。
根据本公开的另一方面,还提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,计算机程序指令被处理器210执行时实现前面任一所述的碰撞检测方法。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (10)
1.一种碰撞检测方法,其特征在于,包括:
获取场景数据,根据所述场景数据中的各实体数据建立碰撞检测模型;
其中,所述碰撞检测模型的个数为两个以上,两个以上的所述碰撞检测模型与所述场景数据中的实体相对应;且
所述碰撞检测模型的数据结构为二叉树结构;各所述碰撞检测模型中每层节点中的包围盒中的数据均为整型数据;
由所建立的两个以上的碰撞检测模型中提取出当前需要进行碰撞检测的第一碰撞模型和第二碰撞模型;
由所述第一碰撞模型的首层节点和所述第二碰撞模型的首层节点开始,逐层对所述第一碰撞模型和所述第二碰撞模型中处于同一层节点的包围盒之间的距离进行计算,并根据计算得到的距离结果得到相应的碰撞检测结果。
2.根据权利要求1所述的方法,其特征在于,根据所述场景数据中的各实体数据建立碰撞检测模型,包括:
由所述场景数据中读取各实体数据中的点数据和三角面索引;
基于所述点数据和所述三角面索引,建立各实体所对应的原始碰撞树;
对所述原始碰撞树进行优化,得到所述碰撞检测模型;
其中,对所述原始碰撞树进行优化,包括节点收敛和数据量化中的至少一种:
所述节点收敛,包括:
收敛所述原始碰撞树中的叶节点,以叶节点包含的三角面索引替代在根节点中的指针,并将所述原始碰撞树中的当前叶节点所包含的三角形收录到当前节点的上一层节点中;
所述数据量化,包括:
获取所述原始碰撞树中各层节点的包围盒的数据,通过量化方式将所述原始碰撞树中各层节点的包围盒的数据由浮点型数据转换为整型数据。
3.根据权利要求2所述的方法,其特征在于,基于所述点数据和所述三角面索引,建立各实体所对应的原始碰撞树,包括:
基于所述点数据和所述三角面索引,建立各所述实体的三维模型;
对各所述三维模型的包围盒进行至少一次空间分割,得到多个包围盒,并根据得到的多个所述包围盒建立所述原始碰撞树;
其中,对各所述三维模型的包围盒进行至少一次空间分割,包括:
获取所述三维模型的包围盒在三维坐标系中的最长轴,按照所述最长轴方向对所述三维模型的包围盒进行初级分割,得到多个一级包围盒;
根据各所述一级包围盒内的三角形个数以及预设个数的大小关系,基于各所述一级包围盒进行逐级分割,直至分割后得到的包围盒内的三角形个数小于或等于预设个数为止;
其中,在按照所述最长轴方向不能对所述三维模型的包围盒进行初级分割时,按照次长轴方向对所述三维模型的包围盒进行初级分割;
在对所述三维模型的包围盒进行分割时,分割位置通过遍历所述包围盒内所有三角形,获取沿分割方向上的极大值和极小值并对所述极大值和所述极小值进行平均值计算的方式得到;
所述预设个数的取值为2。
4.根据权利要求1至3任一项所述的方法,其特征在于,根据计算得到的距离结果得到相应的碰撞检测结果,包括:
在所述距离结果均大于预设数值时,确定所述碰撞检测结果为未碰撞;
在所述距离结果中存在小于或等于所述预设数值的结果时,获取所述第一碰撞模型中当前节点所包含的第一包围盒和所述第二碰撞模型中当前节点所包含的第二包围盒,并基于所述第一包围盒内的三角形和所述第二包围盒内的三角形进行三角形碰撞检测,得到相应的碰撞检测结果;
其中,所述当前节点为小于或等于所述预设数值的距离结果所对应的节点;所述预设数值的取值为2。
5.根据权利要求4所述的方法,其特征在于,基于所述第一包围盒内的三角形和所述第二包围盒内的三角形进行三角形碰撞检测,包括:
依次由所述第一包围盒内选取第一三角形,并由所述第二包围盒内选取第二三角形;其中,所述第一三角形为所述第一包围盒内的所有三角形中的任意一个,所述第二三角形为所述第二包围盒内的所有三角形中的任意一个;
运用离合轴定理对当前选取出的所述第一三角形和所述第二三角形进行三角形碰撞检测。
6.根据权利要求4所述的方法,其特征在于,在所述距离结果中存在小于或等于所述预设数值时,还包括:
确定所述距离结果所对应的当前节点是否为叶节点;
在所述当前节点为叶节点时,获取所述第一碰撞模型中当前节点所包含的第一包围盒和所述第二碰撞模型中当前节点所包含的第二包围盒,并基于所述第一包围盒内的三角形和所述第二包围盒内的三角形进行三角形碰撞检测,得到相应的碰撞检测结果;
在所述当前节点为根节点时,对所述第一碰撞模型和所述第二碰撞模型中当前节点的下一层节点包含的包围盒之间的距离进行计算。
7.一种碰撞检测装置,其特征在于,包括模型建立模块、模型提取模块和碰撞检测模块;
所述模型建立模块,被配置为获取场景数据,根据所述场景数据中的各实体数据建立碰撞检测模型;
其中,所述碰撞检测模型与所述场景数据中的实体相对应;且
所述碰撞检测模型的数据结构为二叉树结构;各所述碰撞检测模型中每层节点中的包围盒中的数据均为整型数据;
所述模型提取模块,被配置为由所建立的碰撞检测模型中提取第一碰撞模型和第二碰撞模型;
所述碰撞检测模块,被配置为由所述第一碰撞模型的首层节点和所述第二碰撞模型的首层节点开始,逐层对所述第一碰撞模型和所述第二碰撞模型中处于同一层节点的包围盒之间的距离进行计算,并根据计算得到的距离结果得到相应的碰撞检测结果。
8.根据权利要求7所述的装置,其特征在于,所述模型建立模块包括数据读取子模块、原始树建立子模块和原始树优化子模块;
所述数据读取子模块,被配置为由所述场景数据中读取各实体数据中的点数据和三角面索引;
所述原始树建立子模块,被配置为基于所述点数据和所述三角面索引,建立各实体所对应的原始碰撞树;
所述原始树优化子模块,被配置为对所述原始碰撞树进行优化,得到所述碰撞检测模型;
其中,所述原始树优化子模块包括节点收敛单元和数据量化单元;
所述节点收敛单元,被配置为收敛所述原始碰撞树中的叶节点,以叶节点包含的三角面索引替代在根节点中的指针,并将所述原始碰撞树中的当前叶节点所包含的三角形收录到当前节点的上一层节点中;
所述数据量化单元,被配置为获取所述原始碰撞树中各层节点的包围盒的数据,通过量化方式将所述原始碰撞树中各层节点的包围盒的数据由浮点型数据转换为整型数据。
9.一种碰撞检测设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述可执行指令时实现权利要求1至6中任意一项所述的方法。
10.一种非易失性计算机可读存储介质,其上存储有计算机程序指令,其特征在于,所述计算机程序指令被处理器执行时实现权利要求1至6中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911142244.2A CN112825199B (zh) | 2019-11-20 | 2019-11-20 | 碰撞检测方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911142244.2A CN112825199B (zh) | 2019-11-20 | 2019-11-20 | 碰撞检测方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112825199A true CN112825199A (zh) | 2021-05-21 |
CN112825199B CN112825199B (zh) | 2023-09-19 |
Family
ID=75906974
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911142244.2A Active CN112825199B (zh) | 2019-11-20 | 2019-11-20 | 碰撞检测方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112825199B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114428480A (zh) * | 2022-01-18 | 2022-05-03 | 南京航空航天大学 | 一种数控机床加工过程中实时刀具防碰撞方法 |
CN114529604A (zh) * | 2022-01-25 | 2022-05-24 | 广州极点三维信息科技有限公司 | 一种空间物体定向碰撞检测方法、系统装置及介质 |
CN115908542A (zh) * | 2022-10-31 | 2023-04-04 | 中交第四航务工程勘察设计院有限公司 | 基于bim的多面体间距离快速计算方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 | 北京像素软件科技股份有限公司 | 一种实时碰撞检测系统的实现方法 |
CN102975082A (zh) * | 2012-10-29 | 2013-03-20 | 上海工程技术大学 | 基于图像信息辅助的多轴加工无干涉刀路检测方法 |
CN104200031A (zh) * | 2014-09-04 | 2014-12-10 | 大连大学 | 一种基于距离优先和时空相关性的碰撞检测方法 |
CN108615262A (zh) * | 2018-04-28 | 2018-10-02 | 重庆大学 | 一种基于gpu的海量模型并行碰撞检测方法 |
-
2019
- 2019-11-20 CN CN201911142244.2A patent/CN112825199B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 | 上海电机学院 | 一种基于包围盒树的碰撞检测方法 |
CN102975082A (zh) * | 2012-10-29 | 2013-03-20 | 上海工程技术大学 | 基于图像信息辅助的多轴加工无干涉刀路检测方法 |
CN104200031A (zh) * | 2014-09-04 | 2014-12-10 | 大连大学 | 一种基于距离优先和时空相关性的碰撞检测方法 |
CN108615262A (zh) * | 2018-04-28 | 2018-10-02 | 重庆大学 | 一种基于gpu的海量模型并行碰撞检测方法 |
Non-Patent Citations (7)
Title |
---|
RANRAN MAN 等: "An improved collision detection algorithm based on OBB", COMPUTER MODELLING & NEW TECHNOLOGIES, vol. 18, no. 01, pages 71 - 79 * |
于瑞云 等: "结合轴对齐包围盒和空间划分的碰撞检测算法", 中国图象图形学报, vol. 23, no. 12, pages 1925 - 1937 * |
周之平 等: "基于矩形包围盒的多边形碰撞检测算法", 中国图象图形学报, vol. 09, no. 11, pages 1294 - 1303 * |
殷存举 等: "实时碰撞检测算法中的数据缓存优化技术研究", 电脑与电信, no. 05, pages 54 - 56 * |
王振文 等: "复杂场景中基于拓扑空间网格的碰撞检测算法", 计算机系统应用, vol. 26, no. 12, pages 116 - 123 * |
郑延斌 等: "基于混合包围盒的碰撞检测优化算法", 计算机工程与科学, vol. 35, no. 04, pages 87 - 92 * |
陈成军 等: "基于八叉树的全局接触搜索算法研究", 计算力学学报, vol. 34, no. 03, pages 322 - 329 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114428480A (zh) * | 2022-01-18 | 2022-05-03 | 南京航空航天大学 | 一种数控机床加工过程中实时刀具防碰撞方法 |
CN114529604A (zh) * | 2022-01-25 | 2022-05-24 | 广州极点三维信息科技有限公司 | 一种空间物体定向碰撞检测方法、系统装置及介质 |
CN114529604B (zh) * | 2022-01-25 | 2022-12-13 | 广州极点三维信息科技有限公司 | 一种空间物体定向碰撞检测方法、系统装置及介质 |
CN115908542A (zh) * | 2022-10-31 | 2023-04-04 | 中交第四航务工程勘察设计院有限公司 | 基于bim的多面体间距离快速计算方法 |
CN115908542B (zh) * | 2022-10-31 | 2023-09-19 | 中交第四航务工程勘察设计院有限公司 | 基于bim的多面体间距离快速计算方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112825199B (zh) | 2023-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10417821B2 (en) | Method of simplifying a geometry model | |
CN112825199B (zh) | 碰撞检测方法、装置、设备及存储介质 | |
US20160063035A1 (en) | Method and system for 3d model database retrieval | |
CN116188805B (zh) | 海量图像的图像内容分析方法、装置和图像信息网络 | |
CN111079801A (zh) | 基于点云匹配快速搜索最近点的方法、介质、终端和装置 | |
CN112435193B (zh) | 一种点云数据去噪的方法、装置、存储介质和电子设备 | |
CN111932570B (zh) | 一种基于网格数据的边缘检测方法、装置、介质及设备 | |
CN115422387B (zh) | 基于多维点云融合数据的点云数据处理方法及系统 | |
WO2022116678A1 (zh) | 目标物体位姿确定方法、装置、存储介质及电子设备 | |
CN116596755B (zh) | 一种点云数据的拼接方法、装置、设备及存储介质 | |
CN111707262B (zh) | 基于最近点向量投影的点云匹配方法、介质、终端和装置 | |
CN116227209A (zh) | 一种点云数据多维线性差值方法、终端设备及存储介质 | |
WO2022242259A1 (zh) | 数据处理方法、装置、设备及介质 | |
CN109961516B (zh) | 表面获取方法、装置及非暂态电脑可读取记录媒体 | |
CN109344750B (zh) | 一种基于结构描述子的复杂结构三维对象识别方法 | |
CN113313140B (zh) | 基于深度注意力的三维模型分类和检索方法及装置 | |
CN112734772B (zh) | 图像处理方法、装置、电子设备以及存储介质 | |
CN111862343A (zh) | 一种三维重建方法、装置、设备及计算机可读存储介质 | |
CN112507938A (zh) | 一种文本图元的几何特征计算方法及识别方法、装置 | |
CN116610840A (zh) | 一种相似数据搜索方法、系统及电子设备 | |
CN114463512B (zh) | 点云数据的处理方法、矢量化方法及装置 | |
CN112802201B (zh) | 实体模型间并行最近距离获取方法和装置 | |
CN114821272A (zh) | 图像识别方法、系统、介质、电子设备及目标检测模型 | |
CN113538558B (zh) | 基于ir图的体积测量优化方法、系统、设备及存储介质 | |
CN114511571A (zh) | 一种点云数据语义分割方法、系统及相关组件 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |