CN111062980B - 一种软体碰撞检测方法 - Google Patents
一种软体碰撞检测方法 Download PDFInfo
- Publication number
- CN111062980B CN111062980B CN201911153563.3A CN201911153563A CN111062980B CN 111062980 B CN111062980 B CN 111062980B CN 201911153563 A CN201911153563 A CN 201911153563A CN 111062980 B CN111062980 B CN 111062980B
- Authority
- CN
- China
- Prior art keywords
- point
- collision
- sphere
- moving object
- center
- 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.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 40
- 230000003068 static effect Effects 0.000 claims abstract description 60
- 238000000034 method Methods 0.000 claims abstract description 44
- 239000013598 vector Substances 0.000 claims abstract description 42
- 238000012360 testing method Methods 0.000 claims abstract description 19
- 230000011218 segmentation Effects 0.000 claims abstract description 13
- 238000013459 approach Methods 0.000 claims abstract description 5
- 239000002245 particle Substances 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 12
- 230000000694 effects Effects 0.000 description 12
- 238000013216 cat model Methods 0.000 description 11
- 238000002474 experimental method Methods 0.000 description 6
- 238000005192 partition Methods 0.000 description 3
- 241001481833 Coryphaena hippurus Species 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008034 disappearance Effects 0.000 description 1
- 230000000149 penetrating effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/60—Analysis of geometric attributes
- G06T7/62—Analysis of geometric attributes of area, perimeter, diameter or volume
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/50—Depth or shape recovery
- G06T7/55—Depth or shape recovery from multiple images
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/60—Analysis of geometric attributes
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种软体碰撞检测方法,具体为:对虚拟环境中的运动物体和静止物体建立Sphere包围盒;当运动物体向静止物体靠近时,确定碰撞方向向量;根据静止物体或运动物体的中心点及碰撞方向向量分别建立空间切割平面,确定静止物体和运动物体的预估碰撞范围;对预估碰撞范围构建空间层次体模型,再建立两棵结构树,判断碰撞相交并对相交包围盒内重叠部分进行空间分割;针对获得的含有两个模型的公共点集的小立方体中的基本几何元素进行相交测试,找到碰撞点;根据碰撞点,确定形变区域。本发明通过预估出碰撞范围后再构建软体碰撞检测的空间数据结构模型来提高软件碰撞检测的效率、提升软体碰撞检测的精确度,解决软体检测的瓶颈问题。
Description
技术领域
本发明属于计算机图形学和虚拟现实相结合的交叉学科技术领域,涉及一种软体碰撞检测方法。
背景技术
碰撞检测广泛应用在虚拟现实、虚拟游戏领域中,有效的碰撞检测可防止虚拟物体间彼此穿透,尤其射击类游戏可判断子弹或箭是否击中目标;虚拟手术实验中,手术器具与人体组织间精确碰撞,对手术指导过程、术后可能出现结果等方面具有深远影响;虚拟教学实验中,针对化学等危险实验和物理等因器材缺失或难以实现、无法做到的实验,有效的碰撞检测可让学生体验到真实实验过程和效果,增强学生学习兴趣,加深对实验的理解和记忆。
结合软体变形特性,软体碰撞检测可分为软体刚体碰撞和软体软体碰撞两类,软体分为空心软体和实心软体。基于实心软体的碰撞检测最终转化为表面质点构成的三角形元素间相交测试方法,但该方法不适合实心软体在变形情况下的碰撞检测,此外,对于复杂形态结构软体,加之受力后形变需大量更新和响应,使得碰撞检测精确度及效率等都成为软体检测的瓶颈问题。
发明内容
本发明的目的是提供一种软体碰撞检测方法,通过预估出碰撞范围后再构建适合软体碰撞检测的空间数据结构模型来提高软件碰撞检测的效率、提升软体碰撞检测的精确度,解决软体检测的瓶颈问题。
本发明所采用的技术方案是,一种软体碰撞检测方法,具体按照以下步骤实施:
步骤1:对虚拟环境中的运动物体和静止物体建立Sphere包围盒;
步骤2:当运动物体向静止物体靠近时,确定两个碰撞物体的碰撞方向,计算碰撞方向向量,即运动物体包围球的球心与静止物体包围球的球心的方向向量;
步骤3:根据静止物体或运动物体的中心点及碰撞方向向量分别建立空间切割平面,分别确定静止物体和运动物体的预估碰撞范围;
步骤4:对步骤3确定的两个预估碰撞范围构建空间层次体模型,再自顶向下建立两棵AABB层次结构树,判断碰撞相交并对相交包围盒内重叠部分进行空间分割;
步骤5:针对步骤4获得的含有两个模型的公共点集的小立方体中的基本几何元素进行相交测试,找到精确的碰撞点;
步骤6:步骤5获取精确的碰撞点,确定中心质点以及受力点,确定形变区域。
本发明的特征还在于,
步骤1具体为:按照以点O(ox,oy,oz)为球心,r为半径建立Sphere包围球;
点P(px,py,pz)是运动物体或静止物体上距离包围球球心最远的点,半径r通过式(1)求取:
分别建立静止物体和运动物体的包围球(C1,r1)和(C2,r2),C1为静止物体对应建立的包围球球心,C2为运动物体对应建立的包围球球心,r1为静止物体对应建立的包围球半径,r2为运动物体对应建立的包围球半径。
步骤2具体为:
步骤2.1:实时检测两个包围球的球心位置,将运动物体的包围盒球心作为碰撞方位向量的起点,记为C2(Xa,Ya,Za),而将静止物体的包围盒球心作为向量的终点,记为C1(Xb,Yb,Zb);
步骤3具体为:
静止物体的预估碰撞范围确定:
a(x-x1)+b(y-y1)+c(z-z1)=0 (2)
夹角小于等于90°的所有点的集合作为预估碰撞范围;
运动物体的预估碰撞范围确定:按照步骤3.1-3.2方法确定运动物体的预估碰撞范围。
步骤4具体为:
步骤4.1:对预估范围内的点构建空间层次体模型,然后以构建后的空间层次体模型中心点为八叉树的分叉中心,按照自顶向下的方法分别构造静止和运动物体的AABB层次结构树,即从组成目标物体的根节点出发,利用分割性质递归地划分结点,直到达到叶子结点即可;
步骤4.2:对运动物体和静止物体构造的两棵AABB层次结构树进行相交测试,求出叶子结点的相交部分;
步骤4.3:利用八叉树算法将运动物体和静止物体包围盒内依据步骤4.2得到的两模型叶子结点的相交部分进行空间分割,首先划分为八个子空间,再以相同规则对含有重叠部分数据的每个子空间继续划分为八个更小的子空间,当子空间中包含的体素数据少于某指定阈值时,八叉树递归停止;
步骤4.4,遍历分割后的每一个小立方体,判断哪个小立方体中含有运动物体和静止物体建立的包围盒的公共点集。
步骤4.2具体为:
步骤4.2.1:设运动物体和静止物体已建立的两个层次结构树为HBVT(A)和HBVT(B),TreeA、TreeB分别指向两棵树的根结点;
步骤4.2.2:检测当前TreeA、TreeB所指向的结点的AABB包围盒是否有重叠部分,如果没有,则递归返回,则递归返回,说明两物体没有发生碰撞,停止遍历;若当前两个结点均指向根结点,则继续执行步骤4.2.3;
步骤4.2.3:依次遍历TreeA、TreeB的左右子结点,递归执行步骤4.2.2、步骤4.2.3,直到TreeA、TreeB均指向叶子结点时返回。
步骤4.2.2中检测当前TreeA、TreeB所指向的结点的AABB包围盒是否有重叠部分的方法如下:假设当前TreeA所指向的结点的AABB包围盒的球心为C3、半径为r3,TreeB所指向的结点的AABB包围盒的球心为C4、半径为r4,两个包围球之间的相交检测根据两个包围球球心之间的距离与半径之和的关系判断,即对于两个包围球(C3,r3)和(C4,r4),如果球心距离小于两球半径之和,即|c3-c4|≤r3+r4,则两包围球相交,即就是有重叠部分。
步骤5具体为:采用点与三角形相交测试,设点P在i时刻空间位置Pi(xi,yi,zi),下一帧i+1时刻位置Pi+1(xi+1,yi+1,zi+1),连接Pi和Pi+1的直线参数方程如式(4)所示:
化简后如式(5)所示:
在i+1时刻,将直线方程带入三角形ΔP1P2P3所在平面Ax+By+Cz+d=0,得式(6):
A(xi+t(xi+1-xi))+B(yi+t(yi+1-yi))+C(zi+t(zi+1-zi))+D=0 (6)
当且仅当直线PiPi+1与ΔP1P2P3所在平面不平行,式(4)必有解,否则不会发生碰撞,当直线与三角形所在平面相交时,可以得到式(7):
t=-(Axi+Byi+Czi+D)/(A(xi+1-xi)+B(yi+1-yi)+C(xz+1-zi)) (7)
步骤5具体为:
步骤5.1:采用点与三角形相交测试,将点P和ΔP1P2P3投影到二维平面得到点P'和ΔP1'P2'P3',通过点P'和ΔP1'P2'P3'的二维平面坐标位置可以判断是否发生碰撞,即当点P'位于ΔP1'P2'P3'的内部时,则称其发生了碰撞,否则视为未碰撞;
步骤5.1:投影后,对投影点P'和投影的ΔP1'P2'P3'进行位置判断,判断点P'是否在ΔP1'P2'P3'内,假设投影点P'坐标为(x',y'),ΔP1'P2'P3'三个顶点坐标为P1'=(x1',y2')、P2'=(x2',y2')、P3'=(x3',y3'),则三角形边直线方程如式(8)所示:
li(x,y)=(x-xi)(xi+1-xi)-(y-yi)(yi+1-yi)=0(i=1,2,3) (8)
把点P'带入式(8)中,当(x',y')同时位于ΔP1'P2'P3'的三边负方向时,则投影点P'在三角形的内部,即发生了碰撞现象,则点P即为碰撞点,否则未发生碰撞;
其中,如果li(x',y')>0,投影点位于直线划分的正半平面,如果li(x',y')=0,投影点位于三角形边上,否则投影点位于负半平面。
步骤6具体为:
步骤6.1:求出步骤4获取的层次体模型中所有质点间的平均距离dis;
步骤6.2:求出距离碰撞点最近的质点,以该质点为中心质点,平均距离dis为半径确定一个球形邻域,该范围内的质点为中心质点的直接受力点;
步骤6.3:求出所有受力点的合力大小和方向,判断受力点方向是否为正,若为正,则进入步骤6.4,若为负,则将此邻域内质点作为最终形变范围;
步骤6.4:将球形邻域的半径增加一个dis距离进行扩展,并将新增加的质点作为间接受力点,重复步骤6.3进行受力判断,即可得到模型受力后的最终形变范围。
本发明的有益效果是:本发明是一种软体碰撞检测方法,通过预估出碰撞范围后再构建适合软体碰撞检测的空间数据结构模型来提高软件碰撞检测的效率,给出一种基于空间剖分的软体精细碰撞检测方法提升软体碰撞检测的精确度,解决软体检测的瓶颈问题。
附图说明
图1是本发明一种软体碰撞检测方法实施例中Dragon模型和Cat模型的初始位置图;
图2是本发明一种软体碰撞检测方法实施例中当Dragon模型静止和Cat模型向Dragon方位运动两个包围球发生碰撞的效果图;
图3是本发明一种软体碰撞检测方法实施例中Dragon模型和Cat模型碰撞范围的预估效果图;
图4是本发明一种软体碰撞检测方法实施例中对Dragon模型和Cat模型构建层次结构树效果图;
图5是本发明一种软体碰撞检测方法中八叉树空间分割示意图;
图6是本发明一种软体碰撞检测方法中点与三角形在二维平面的投影图;
图7是本发明一种软体碰撞检测方法的软体碰撞检测效果图。
具体实施方式
下面结合附图和具体实施方式对本发明进行详细说明。
本发明一种软体碰撞检测方法,具体按照以下步骤实施:
步骤1:对虚拟环境中的运动物体和静止物体建立Sphere包围盒;具体为:按照以点O(ox,oy,oz)为球心,r为半径建立Sphere包围球;
点P(px,py,pz)是运动物体或静止物体上距离包围球球心最远的点,半径r通过式(1)求取:
分别建立静止物体和运动物体的包围球(C1,r1)和(C2,r2),C1为静止物体对应建立的包围球球心,C2为运动物体对应建立的包围球球心,r1为静止物体对应建立的包围球半径,r2为运动物体对应建立的包围球半径;
步骤2:当运动物体向静止物体靠近时,确定两个碰撞物体的碰撞方向,计算碰撞方向向量,即运动物体包围球的球心与静止物体包围球的球心的方向向量;具体为:
步骤2.1:实时检测两个包围球的球心位置,将运动物体的包围盒球心作为碰撞方位向量的起点,记为C2(Xa,Ya,Za),而将静止物体的包围盒球心作为向量的终点,记为C1(Xb,Yb,Zb);
步骤3:根据静止物体或运动物体的中心点及碰撞方向向量分别建立空间切割平面,分别确定静止物体和运动物体的预估碰撞范围;具体为:
静止物体的预估碰撞范围确定:
a(x-x1)+b(y-y1)+c(z-z1)=0 (2)
夹角小于等于90°的所有点的集合作为预估碰撞范围;
运动物体的预估碰撞范围确定:按照步骤3.1-3.2方法确定运动物体的预估碰撞范围;
步骤4:对步骤3确定的两个预估碰撞范围构建空间层次体模型,再自顶向下建立两棵AABB层次结构树,判断碰撞相交并对相交包围盒内重叠部分进行空间分割;具体为:
步骤4.1:对预估范围内的点构建空间层次体模型,然后以构建后的空间层次体模型中心点为八叉树的分叉中心,按照自顶向下的方法分别构造静止和运动物体的AABB层次结构树,即从组成目标物体的根节点出发,利用分割性质递归地划分结点,直到达到叶子结点即可;
步骤4.2:对运动物体和静止物体构造的两棵AABB层次结构树进行相交测试,求出叶子结点的相交部分;具体为:
步骤4.2.1:设运动物体和静止物体已建立的两个层次结构树为HBVT(A)和HBVT(B),TreeA、TreeB分别指向两棵树的根结点;
步骤4.2.2:检测当前TreeA、TreeB所指向的结点的AABB包围盒是否有重叠部分,如果没有,则递归返回,则递归返回,说明两物体没有发生碰撞,停止遍历;若当前两个结点均指向根结点,则继续执行步骤4.2.3;其中,检测当前TreeA、TreeB所指向的结点的AABB包围盒是否有重叠部分的方法如下:假设当前TreeA所指向的结点的AABB包围盒的球心为C3、半径为r3,TreeB所指向的结点的AABB包围盒的球心为C4、半径为r4,两个包围球之间的相交检测根据两个包围球球心之间的距离与半径之和的关系判断,即对于两个包围球(C3,r3)和(C4,r4),如果球心距离小于两球半径之和,即|c3-c4|≤r3+r4,则两包围球相交,即就是有重叠部分;
步骤4.2.3:依次遍历TreeA、TreeB的左右子结点,递归执行步骤4.2.2、步骤4.2.3,直到TreeA、TreeB均指向叶子结点时返回;
步骤4.3:利用八叉树算法将运动物体和静止物体包围盒内依据步骤4.2得到的两模型叶子结点的相交部分进行空间分割,首先划分为八个子空间,再以相同规则对含有重叠部分数据的每个子空间继续划分为八个更小的子空间,当子空间中包含的体素数据少于某指定阈值时,八叉树递归停止;
步骤4.4,遍历分割后的每一个小立方体,判断哪个小立方体中含有运动物体和静止物体建立的包围盒的公共点集;
步骤5:针对步骤4获得的含有两个模型的公共点集的小立方体中的基本几何元素进行相交测试,找到精确的碰撞点;具体为:采用点与三角形相交测试,设点P在i时刻空间位置Pi(xi,yi,zi),下一帧i+1时刻位置Pi+1(xi+1,yi+1,zi+1),连接Pi和Pi+1的直线参数方程如式(4)所示:
化简后如式(5)所示:
在i+1时刻,将直线方程带入三角形ΔP1P2P3所在平面Ax+By+Cz+d=0,得式(6):
A(xi+t(xi+1-xi))+B(yi+t(yi+1-yi))+C(zi+t(zi+1-zi))+D=0 (6)
当且仅当直线PiPi+1与ΔP1P2P3所在平面不平行,式(4)必有解,否则不会发生碰撞,当直线与三角形所在平面相交时,可以得到式(7):
t=-(Axi+Byi+Czi+D)/(A(xi+1-xi)+B(yi+1-yi)+C(xz+1-zi)) (7)
或者具体为:
步骤5.1:采用点与三角形相交测试,将点P和ΔP1P2P3投影到二维平面得到点P'和ΔP1'P2'P3',通过点P'和ΔP1'P2'P3'的二维平面坐标位置可以判断是否发生碰撞,即当点P'位于ΔP1'P2'P3'的内部时,则称其发生了碰撞,否则视为未碰撞;
步骤5.1:投影后,对投影点P'和投影的ΔP1'P2'P3'进行位置判断,判断点P'是否在ΔP1'P2'P3'内,假设投影点P'坐标为(x',y'),ΔP1'P2'P3'三个顶点坐标为P1'=(x1',y2')、P2'=(x2',y2')、P3'=(x3',y3'),则三角形边直线方程如式(8)所示:
li(x,y)=(x-xi)(xi+1-xi)-(y-yi)(yi+1-yi)=0(i=1,2,3) (8)
把点P'带入式(8)中,当(x',y')同时位于ΔP1'P2'P3'的三边负方向时,则投影点P'在三角形的内部,即发生了碰撞现象,则点P即为碰撞点,否则未发生碰撞;
其中,如果li(x',y')>0,投影点位于直线划分的正半平面,如果li(x',y')=0,投影点位于三角形边上,否则投影点位于负半平面;
步骤6:步骤5获取精确的碰撞点,确定中心质点以及受力点,确定形变区域;具体为:
步骤6.1:求出步骤4获取的层次体模型中所有质点间的平均距离dis;
步骤6.2:求出距离碰撞点最近的质点,以该质点为中心质点,平均距离dis为半径确定一个球形邻域,该范围内的质点为中心质点的直接受力点;
步骤6.3:求出所有受力点的合力大小和方向,判断受力点方向是否为正,若为正,则进入步骤6.4,若为负,则将此邻域内质点作为最终形变范围;
步骤6.4:将球形邻域的半径增加一个dis距离进行扩展,并将新增加的质点作为间接受力点,重复步骤6.3进行受力判断,即可得到模型受力后的最终形变范围。
实施例
本发明选择模型中有分支或洞的Cat模型和点集规模大、曲面复杂的Dragon模型进行实验,如图1所示,图1为Dragon模型和Cat模型的初始位置;图2为当Dragon模型静止,Cat模型向Dragon方位运动,两个包围球发生碰撞的效果图。
一种软体碰撞检测方法,具体按照以下步骤实施:
步骤1:对虚拟环境中的运动物体和静止物体建立Sphere包围盒;具体为:按照以点O(ox,oy,oz)为球心,r为半径建立Sphere包围球;
点P(px,py,pz)是运动物体或静止物体上距离包围球球心最远的点,半径r通过式(1)求取:
分别建立静止物体和运动物体的包围球(C1,r1)和(C2,r2),C1为静止物体对应建立的包围球球心,C2为运动物体对应建立的包围球球心,r1为静止物体对应建立的包围球半径,r2为运动物体对应建立的包围球半径;
步骤2:当运动物体向静止物体靠近时,确定两个碰撞物体的碰撞方向,计算碰撞方向向量,即运动物体包围球的球心与静止物体包围球的球心的方向向量;具体为:
步骤2.1:实时检测两个包围球的球心位置,将运动物体的包围盒球心作为碰撞方位向量的起点,记为C2(Xa,Ya,Za),而将静止物体的包围盒球心作为向量的终点,记为C1(Xb,Yb,Zb);
步骤3:如图3所示,为Dragon模型和Cat模型碰撞范围的预估效果图,根据静止物体或运动物体的中心点及碰撞方向向量分别建立空间切割平面,分别确定静止物体和运动物体的预估碰撞范围;具体为:
静止物体的预估碰撞范围确定:
a(x-x1)+b(y-y1)+c(z-z1)=0 (2)
夹角小于等于90°的所有点的集合作为预估碰撞范围;
运动物体的预估碰撞范围确定:按照步骤3.1-3.2方法确定运动物体的预估碰撞范围;
步骤4:对步骤3确定的两个预估碰撞范围构建空间层次体模型,再自顶向下建立两棵AABB层次结构树,判断碰撞相交并对相交包围盒内重叠部分进行空间分割;具体为:
步骤4.1:对预估范围内的点构建空间层次体模型,然后以构建后的空间层次体模型中心点为八叉树的分叉中心,按照自顶向下的方法分别构造静止和运动物体的AABB层次结构树,即从组成目标物体的根节点出发,利用分割性质递归地划分结点,直到达到叶子结点即可,试验效果如图4所示,图4(a)是对Dragon模型和Cat模型的预估碰撞范围内的体素数据进行构建空间层次体模型效果图;(b)是对Dragon模型和Cat模型构建第二层层次结构树效果图;(c)是对Dragon模型和Cat模型构建第三层层次结构树效果图;
步骤4.2:对运动物体和静止物体构造的两棵AABB层次结构树进行相交测试,求出叶子结点的相交部分;具体为:
步骤4.2.1:设运动物体和静止物体已建立的两个层次结构树为HBVT(A)和HBVT(B),TreeA、TreeB分别指向两棵树的根结点;
步骤4.2.2:检测当前TreeA、TreeB所指向的结点的AABB包围盒是否有重叠部分,如果没有,则递归返回,则递归返回,说明两物体没有发生碰撞,停止遍历;若当前两个结点均指向根结点,则继续执行步骤4.2.3;其中,检测当前TreeA、TreeB所指向的结点的AABB包围盒是否有重叠部分的方法如下:假设当前TreeA所指向的结点的AABB包围盒的球心为C3、半径为r3,TreeB所指向的结点的AABB包围盒的球心为C4、半径为r4,两个包围球之间的相交检测根据两个包围球球心之间的距离与半径之和的关系判断,即对于两个包围球(C3,r3)和(C4,r4),如果球心距离小于两球半径之和,即|c3-c4|≤r3+r4,则两包围球相交,即就是有重叠部分;
步骤4.2.3:依次遍历TreeA、TreeB的左右子结点,递归执行步骤4.2.2、步骤4.2.3,直到TreeA、TreeB均指向叶子结点时返回;
步骤4.3:利用八叉树算法将运动物体和静止物体包围盒内依据步骤4.2得到的两模型叶子结点的相交部分进行空间分割,首先划分为八个子空间,再以相同规则对含有重叠部分数据的每个子空间继续划分为八个更小的子空间,当子空间中包含的体素数据少于某指定阈值时,八叉树递归停止;如图5所示;
步骤4.4,遍历分割后的每一个小立方体,判断哪个小立方体中含有运动物体和静止物体建立的包围盒的公共点集;
步骤5:针对步骤4获得的含有两个模型的公共点集的小立方体中的基本几何元素进行相交测试,找到精确的碰撞点;具体为:采用点与三角形相交测试,设点P在i时刻空间位置Pi(xi,yi,zi),下一帧i+1时刻位置Pi+1(xi+1,yi+1,zi+1),连接Pi和Pi+1的直线参数方程如式(4)所示:
化简后如式(5)所示:
在i+1时刻,将直线方程带入三角形ΔP1P2P3所在平面Ax+By+Cz+d=0,得式(6):
A(xi+t(xi+1-xi))+B(yi+t(yi+1-yi))+C(zi+t(zi+1-zi))+D=0 (6)
当且仅当直线PiPi+1与ΔP1P2P3所在平面不平行,式(4)必有解,否则不会发生碰撞,当直线与三角形所在平面相交时,可以得到式(7):
t=-(Axi+Byi+Czi+D)/(A(xi+1-xi)+B(yi+1-yi)+C(xz+1-zi)) (7)
或者具体为:
步骤5.1:采用点与三角形相交测试,将点P和ΔP1P2P3投影到二维平面得到点P'和ΔP1'P2'P3',如图6所示,通过点P'和ΔP1'P2'P3'的二维平面坐标位置可以判断是否发生碰撞,即当点P'位于ΔP1'P2'P3'的内部时,则称其发生了碰撞,否则视为未碰撞;
步骤5.1:投影后,对投影点P'和投影的ΔP1'P2'P3'进行位置判断,判断点P'是否在ΔP1'P2'P3'内,假设投影点P'坐标为(x',y'),ΔP1'P2'P3'三个顶点坐标为P1'=(x1',y2')、P2'=(x2',y2')、P3'=(x3',y3'),则三角形边直线方程如式(8)所示:
li(x,y)=(x-xi)(xi+1-xi)-(y-yi)(yi+1-yi)=0(i=1,2,3) (8)
把点P'带入式(8)中,当(x',y')同时位于ΔP1'P2'P3'的三边负方向时,则投影点P'在三角形的内部,即发生了碰撞现象,则点P即为碰撞点,否则未发生碰撞;
其中,如果li(x',y')>0,投影点位于直线划分的正半平面,如果li(x',y')=0,投影点位于三角形边上,否则投影点位于负半平面;
步骤6:步骤5获取精确的碰撞点,确定中心质点以及受力点,确定形变区域;具体为:
步骤6.1:求出步骤4获取的层次体模型中所有质点间的平均距离dis;
步骤6.2:求出距离碰撞点最近的质点,以该质点为中心质点,平均距离dis为半径确定一个球形邻域,该范围内的质点为中心质点的直接受力点;
步骤6.3:求出所有受力点的合力大小和方向,判断受力点方向是否为正,若为正,则进入步骤6.4,若为负,则将此邻域内质点作为最终形变范围;
步骤6.4:将球形邻域的半径增加一个dis距离进行扩展,并将新增加的质点作为间接受力点,重复步骤6.3进行受力判断,即可得到模型受力后的最终形变范围,软件碰撞检测及形变如图7所示,图7(a)是Head模型和Dolphin模型的原图;(b)是检测出两模型接触点的效果图;(c)是软体和刚体形变效果图,此时Head模型为软体,Dolphin模型为刚体;(d)是两个模型同为软体模型时的碰撞形变图。
Claims (9)
1.一种软体碰撞检测方法,其特征在于,具体按照以下步骤实施:
步骤1:对虚拟环境中的运动物体和静止物体建立Sphere包围盒;
步骤2:当运动物体向静止物体靠近时,确定两个碰撞物体的碰撞方向,计算碰撞方向向量,即运动物体包围球的球心与静止物体包围球的球心的方向向量;
步骤3:根据静止物体或运动物体的中心点及碰撞方向向量分别建立空间切割平面,分别确定静止物体和运动物体的预估碰撞范围;
步骤4:对步骤3确定的两个预估碰撞范围构建空间层次体模型,再自顶向下建立两棵AABB层次结构树,判断碰撞相交并对相交包围盒内重叠部分进行空间分割;具体为:
步骤4.1:对预估范围内的点构建空间层次体模型,然后以构建后的空间层次体模型中心点为八叉树的分叉中心,按照自顶向下的方法分别构造静止和运动物体的AABB层次结构树,即从组成目标物体的根节点出发,利用分割性质递归地划分结点,直到达到叶子结点即可;
步骤4.2:对运动物体和静止物体构造的两棵AABB层次结构树进行相交测试,求出叶子结点的相交部分;
步骤4.3:利用八叉树算法将运动物体和静止物体包围盒内依据步骤4.2得到的两模型叶子结点的相交部分进行空间分割,首先划分为八个子空间,再以相同规则对含有重叠部分数据的每个子空间继续划分为八个更小的子空间,当子空间中包含的体素数据少于某指定阈值时,八叉树递归停止;
步骤4.4,遍历分割后的每一个小立方体,判断哪个小立方体中含有运动物体和静止物体建立的包围盒的公共点集;
步骤5:针对步骤4获得的含有两个模型的公共点集的小立方体中的基本几何元素进行相交测试,找到精确的碰撞点;
步骤6:步骤5获取精确的碰撞点,确定中心质点以及受力点,确定形变区域。
5.根据权利要求1所述的一种软体碰撞检测方法,其特征在于,所述步骤4.2具体为:
步骤4.2.1:设运动物体和静止物体已建立的两个层次结构树为HBVT(A)和HBVT(B),TreeA、TreeB分别指向两棵树的根结点;
步骤4.2.2:检测当前TreeA、TreeB所指向的结点的AABB包围盒是否有重叠部分,如果没有,则递归返回,说明两物体没有发生碰撞,停止遍历;若当前两个结点均指向根结点,则继续执行步骤4.2.3;
步骤4.2.3:依次遍历TreeA、TreeB的左右子结点,递归执行步骤4.2.2、步骤4.2.3,直到TreeA、TreeB均指向叶子结点时返回。
6.根据权利要求5所述的一种软体碰撞检测方法,其特征在于,所述步骤4.2.2中检测当前TreeA、TreeB所指向的结点的AABB包围盒是否有重叠部分的方法如下:假设当前TreeA所指向的结点的AABB包围盒的球心为C3、半径为r3,TreeB所指向的结点的AABB包围盒的球心为C4、半径为r4,两个包围球之间的相交检测根据两个包围球球心之间的距离与半径之和的关系判断,即对于两个包围球(C3,r3)和(C4,r4),如果球心距离小于两球半径之和,即|c3-c4|≤r3+r4,则两包围球相交,即就是有重叠部分。
7.根据权利要求1所述的一种软体碰撞检测方法,其特征在于,所述步骤5具体为:采用点与三角形相交测试,设点P在i时刻空间位置Pi(xi,yi,zi),下一帧i+1时刻位置Pi+1(xi+1,yi+1,zi+1),连接Pi和Pi+1的直线参数方程如式(4)所示:
化简后如式(5)所示:
在i+1时刻,将直线方程带入三角形ΔP1P2P3所在平面Ax+By+Cz+d=0,得式(6):
A(xi+t(xi+1-xi))+B(yi+t(yi+1-yi))+C(zi+t(zi+1-zi))+D=0 (6)
当且仅当直线PiPi+1与ΔP1P2P3所在平面不平行,式(4)必有解,否则不会发生碰撞,当直线与三角形所在平面相交时,可以得到式(7):
t=-(Axi+Byi+Czi+D)/(A(xi+1-xi)+B(yi+1-yi)+C(xz+1-zi)) (7)
8.根据权利要求7所述的一种软体碰撞检测方法,其特征在于,所述步骤5具体为:
步骤5.1:采用点与三角形相交测试,将点P和ΔP1P2P3投影到二维平面得到点P'和ΔP1'P2'P3',通过点P'和ΔP1'P2'P3'的二维平面坐标位置可以判断是否发生碰撞,即当点P'位于ΔP1'P2'P3'的内部时,则称其发生了碰撞,否则视为未碰撞;
步骤5.1:投影后,对投影点P'和投影的ΔP1'P2'P3'进行位置判断,判断点P'是否在ΔP1'P2'P3'内,假设投影点P'坐标为(x',y'),ΔP1'P2'P3'三个顶点坐标为P1'=(x1',y2')、P2'=(x2',y2')、P3'=(x3',y3'),则三角形边直线方程如式(8)所示:
li(x,y)=(x-xi)(xi+1-xi)-(y-yi)(yi+1-yi)=0(i=1,2,3) (8)
把点P'带入式(8)中,当(x',y')同时位于ΔP1'P2'P3'的三边负方向时,则投影点P'在三角形的内部,即发生了碰撞现象,则点P即为碰撞点,否则未发生碰撞;
其中,如果li(x',y')>0,投影点位于直线划分的正半平面,如果li(x',y')=0,投影点位于三角形边上,否则投影点位于负半平面。
9.根据权利要求5或6所述的一种软体碰撞检测方法,其特征在于,所述步骤6具体为:
步骤6.1:求出步骤4获取的层次体模型中所有质点间的平均距离dis;
步骤6.2:求出距离碰撞点最近的质点,以该质点为中心质点,平均距离dis为半径确定一个球形邻域,该范围内的质点为中心质点的直接受力点;
步骤6.3:求出所有受力点的合力大小和方向,判断受力点方向是否为正,若为正,则进入步骤6.4,若为负,则将此邻域内质点作为最终形变范围;
步骤6.4:将球形邻域的半径增加一个dis距离进行扩展,并将新增加的质点作为间接受力点,重复步骤6.3进行受力判断,即可得到模型受力后的最终形变范围。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911153563.3A CN111062980B (zh) | 2019-11-22 | 2019-11-22 | 一种软体碰撞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911153563.3A CN111062980B (zh) | 2019-11-22 | 2019-11-22 | 一种软体碰撞检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111062980A CN111062980A (zh) | 2020-04-24 |
CN111062980B true CN111062980B (zh) | 2022-03-25 |
Family
ID=70297992
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911153563.3A Active CN111062980B (zh) | 2019-11-22 | 2019-11-22 | 一种软体碰撞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111062980B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112179602B (zh) * | 2020-08-28 | 2021-06-25 | 北京邮电大学 | 一种机械臂碰撞检测方法 |
CN111921202B (zh) * | 2020-09-16 | 2021-01-08 | 成都完美天智游科技有限公司 | 虚拟场景的数据处理方法、装置、设备及可读存储介质 |
CN112619152A (zh) * | 2021-01-05 | 2021-04-09 | 网易(杭州)网络有限公司 | 游戏包围盒的处理方法、装置及电子设备 |
CN112949114B (zh) * | 2021-02-01 | 2024-07-12 | 江南大学 | 一种酒精灯火苗接触不规则表面燃烧模拟方法 |
CN113158363B (zh) * | 2021-03-24 | 2022-07-26 | 秦皇岛燕大滨沅科技发展有限公司 | 一种基于3d建模的装船机智能防碰预警系统和方法 |
CN114266147B (zh) * | 2021-12-14 | 2023-02-10 | 中国电建集团中南勘测设计研究院有限公司 | 一种地下管线分布分析方法及系统 |
CN116036604B (zh) * | 2023-01-28 | 2023-05-30 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、计算机及可读存储介质 |
CN116612825B (zh) * | 2023-07-19 | 2023-10-13 | 四川省产品质量监督检验检测院 | 分子静电势等值面点云的碰撞点检测和碰撞体积计算方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4192976B2 (ja) * | 2006-08-02 | 2008-12-10 | ソニー株式会社 | 接触形状算出装置及び接触形状算出方法、並びにコンピュータ・プログラム |
CN101866386B (zh) * | 2010-06-25 | 2012-04-18 | 杭州维肖软件科技有限公司 | 一种基于能量平衡的柔性体碰撞处理方法 |
CN104867177A (zh) * | 2014-12-23 | 2015-08-26 | 上海电机学院 | 一种基于包围盒树法的并行碰撞检测方法 |
CN105469406B (zh) * | 2015-11-30 | 2018-05-04 | 东北大学 | 一种基于包围盒与空间划分的虚拟物体碰撞检测方法 |
CN107689078A (zh) * | 2017-08-21 | 2018-02-13 | 哈尔滨工程大学 | 一种基于链表排序平衡二叉树的层次包围盒树构建方法 |
CN109872383A (zh) * | 2017-12-01 | 2019-06-11 | 上海航空电器有限公司 | 一种虚拟现实碰撞检测方法 |
-
2019
- 2019-11-22 CN CN201911153563.3A patent/CN111062980B/zh active Active
Non-Patent Citations (1)
Title |
---|
"The Collision Detection Algorithm Based on Bounding Volumes and Space Subdivision";Zhiliang Liu et al.;《IEEE》;20111231;第1-3页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111062980A (zh) | 2020-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111062980B (zh) | 一种软体碰撞检测方法 | |
CN103236079B (zh) | 一种基于三维模型体素化的内部球改进构造方法 | |
CN111583369B (zh) | 一种基于面线角点特征提取的激光slam方法 | |
Song et al. | Surface-based exploration for autonomous 3d modeling | |
US11442162B2 (en) | Millimeter wave radar modeling-based method for object visibility determination | |
Zhou et al. | T-LOAM: Truncated least squares LiDAR-only odometry and mapping in real time | |
CN105046710A (zh) | 基于深度图分割与代理几何体的虚实碰撞交互方法及装置 | |
CN104408774B (zh) | 一种基于gpu加速的实体面片模型间碰撞检测方法 | |
CN105652255B (zh) | 雷达组网系统的空间配准方法 | |
CN108564600B (zh) | 运动物体姿态跟踪方法及装置 | |
CN111508282B (zh) | 低空无人机农田作业飞行障碍物冲突检测方法 | |
CN109885046B (zh) | 一种基于粒子滤波的移动机器人定位加速方法 | |
CN115081195A (zh) | 一种激光雷达仿真的方法、装置、电子设备及存储介质 | |
Reeves et al. | Identification of three-dimensional objects using range information | |
Sun et al. | Mathematical Method for Lidar-based Obstacle Detection of Intelligent Vehicle | |
CN114022526B (zh) | 一种基于三维形状上下文的sac-ia点云配准方法 | |
CN115908541A (zh) | 针对室内环境基于曲率信息的车载激光雷达点云聚类算法 | |
CN111414801B (zh) | 不确定性外形的电大非合作目标分类识别方法 | |
Qian et al. | Object tracking method based on joint global and local feature descriptor of 3D LIDAR point cloud | |
Xue-li et al. | Research of collision detection algorithm based on particle swarm optimization | |
Liu et al. | RETRACTED: Design and implementation of badminton robot perception and control system | |
Garcia et al. | Autonomous sensor planning for 3D reconstruction of complex objects from range images | |
CN113885522B (zh) | 水面机器人避障方法、装置、设备及可读存储介质 | |
Biyik et al. | Investigation of the Effects of Man-Made/Natural Obstructions on the Performance of VOR Systems Using Nvidia OptiX Library | |
TWI778756B (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 | ||
CB03 | Change of inventor or designer information | ||
CB03 | Change of inventor or designer information |
Inventor after: Ning Xiaojuan Inventor after: Wang Yinghui Inventor after: Zhao Yanni Inventor after: Wang Jingwen Inventor before: Wang Yinghui Inventor before: Zhao Yanni Inventor before: Ning Xiaojuan Inventor before: Wang Jingwen |
|
GR01 | Patent grant | ||
GR01 | Patent grant |