CN111062980B - 一种软体碰撞检测方法 - Google Patents

一种软体碰撞检测方法 Download PDF

Info

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
Application number
CN201911153563.3A
Other languages
English (en)
Other versions
CN111062980A (zh
Inventor
宁小娟
王映辉
赵艳妮
王静文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xian University of Technology
Original Assignee
Xian University of Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xian University of Technology filed Critical Xian University of Technology
Priority to CN201911153563.3A priority Critical patent/CN111062980B/zh
Publication of CN111062980A publication Critical patent/CN111062980A/zh
Application granted granted Critical
Publication of CN111062980B publication Critical patent/CN111062980B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/60Analysis of geometric attributes
    • G06T7/62Analysis of geometric attributes of area, perimeter, diameter or volume
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/50Depth or shape recovery
    • G06T7/55Depth or shape recovery from multiple images
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/60Analysis 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包围球;
其中,
Figure BDA0002284226040000021
Xmax、Xmin、Ymax、Ymin、Zmax、Zmin分别表示运动物体或静止物体投影在X、Y、Z坐标轴上的最大最小值;
点P(px,py,pz)是运动物体或静止物体上距离包围球球心最远的点,半径r通过式(1)求取:
Figure BDA0002284226040000031
分别建立静止物体和运动物体的包围球(C1,r1)和(C2,r2),C1为静止物体对应建立的包围球球心,C2为运动物体对应建立的包围球球心,r1为静止物体对应建立的包围球半径,r2为运动物体对应建立的包围球半径。
步骤2具体为:
步骤2.1:实时检测两个包围球的球心位置,将运动物体的包围盒球心作为碰撞方位向量的起点,记为C2(Xa,Ya,Za),而将静止物体的包围盒球心作为向量的终点,记为C1(Xb,Yb,Zb);
步骤2.2:计算碰撞方向向量
Figure BDA0002284226040000032
步骤3具体为:
静止物体的预估碰撞范围确定:
步骤3.1,根据静止物体的球心C1(x1,y1,z1)和碰撞方向向量
Figure BDA0002284226040000033
建立模型的切割平面,如式(2)所示;
a(x-x1)+b(y-y1)+c(z-z1)=0 (2)
步骤3.2,切割面上的任一点P和中心点C1的方向向量为
Figure BDA0002284226040000034
向量
Figure BDA0002284226040000035
和向量
Figure BDA0002284226040000036
夹角的具体求法如式(3)所示;
Figure BDA0002284226040000037
夹角小于等于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)所示:
Figure BDA0002284226040000051
化简后如式(5)所示:
Figure BDA0002284226040000052
在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)
当t∈[0,1]时,点与三角形所在平面发生碰撞,将得到的t带入式(5)中,求出碰撞点;如果
Figure BDA0002284226040000053
区间,点不会与三角形所在平面发生碰撞。
步骤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包围球;
其中,
Figure BDA0002284226040000071
Xmax、Xmin、Ymax、Ymin、Zmax、Zmin分别表示运动物体或静止物体投影在X、Y、Z坐标轴上的最大最小值;
点P(px,py,pz)是运动物体或静止物体上距离包围球球心最远的点,半径r通过式(1)求取:
Figure BDA0002284226040000072
分别建立静止物体和运动物体的包围球(C1,r1)和(C2,r2),C1为静止物体对应建立的包围球球心,C2为运动物体对应建立的包围球球心,r1为静止物体对应建立的包围球半径,r2为运动物体对应建立的包围球半径;
步骤2:当运动物体向静止物体靠近时,确定两个碰撞物体的碰撞方向,计算碰撞方向向量,即运动物体包围球的球心与静止物体包围球的球心的方向向量;具体为:
步骤2.1:实时检测两个包围球的球心位置,将运动物体的包围盒球心作为碰撞方位向量的起点,记为C2(Xa,Ya,Za),而将静止物体的包围盒球心作为向量的终点,记为C1(Xb,Yb,Zb);
步骤2.2:计算碰撞方向向量
Figure BDA0002284226040000081
步骤3:根据静止物体或运动物体的中心点及碰撞方向向量分别建立空间切割平面,分别确定静止物体和运动物体的预估碰撞范围;具体为:
静止物体的预估碰撞范围确定:
步骤3.1,根据静止物体的球心C1(x1,y1,z1)和碰撞方向向量
Figure BDA0002284226040000082
建立模型的切割平面,如式(2)所示;
a(x-x1)+b(y-y1)+c(z-z1)=0 (2)
步骤3.2,切割面上的任一点P和中心点C1的方向向量为
Figure BDA0002284226040000083
向量
Figure BDA0002284226040000084
和向量
Figure BDA0002284226040000085
夹角的具体求法如式(3)所示;
Figure BDA0002284226040000086
夹角小于等于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)所示:
Figure BDA0002284226040000101
化简后如式(5)所示:
Figure BDA0002284226040000102
在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)
当t∈[0,1]时,点与三角形所在平面发生碰撞,将得到的t带入式(5)中,求出碰撞点;如果
Figure BDA0002284226040000103
区间,点不会与三角形所在平面发生碰撞;
或者具体为:
步骤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包围球;
其中,
Figure BDA0002284226040000121
Xmax、Xmin、Ymax、Ymin、Zmax、Zmin分别表示运动物体或静止物体投影在X、Y、Z坐标轴上的最大最小值;
点P(px,py,pz)是运动物体或静止物体上距离包围球球心最远的点,半径r通过式(1)求取:
Figure BDA0002284226040000122
分别建立静止物体和运动物体的包围球(C1,r1)和(C2,r2),C1为静止物体对应建立的包围球球心,C2为运动物体对应建立的包围球球心,r1为静止物体对应建立的包围球半径,r2为运动物体对应建立的包围球半径;
步骤2:当运动物体向静止物体靠近时,确定两个碰撞物体的碰撞方向,计算碰撞方向向量,即运动物体包围球的球心与静止物体包围球的球心的方向向量;具体为:
步骤2.1:实时检测两个包围球的球心位置,将运动物体的包围盒球心作为碰撞方位向量的起点,记为C2(Xa,Ya,Za),而将静止物体的包围盒球心作为向量的终点,记为C1(Xb,Yb,Zb);
步骤2.2:计算碰撞方向向量
Figure BDA0002284226040000131
步骤3:如图3所示,为Dragon模型和Cat模型碰撞范围的预估效果图,根据静止物体或运动物体的中心点及碰撞方向向量分别建立空间切割平面,分别确定静止物体和运动物体的预估碰撞范围;具体为:
静止物体的预估碰撞范围确定:
步骤3.1,根据静止物体的球心C1(x1,y1,z1)和碰撞方向向量
Figure BDA0002284226040000132
建立模型的切割平面,如式(2)所示;
a(x-x1)+b(y-y1)+c(z-z1)=0 (2)
步骤3.2,切割面上的任一点P和中心点C1的方向向量为
Figure BDA0002284226040000133
向量
Figure BDA0002284226040000134
和向量
Figure BDA0002284226040000135
夹角的具体求法如式(3)所示;
Figure BDA0002284226040000136
夹角小于等于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)所示:
Figure BDA0002284226040000151
化简后如式(5)所示:
Figure BDA0002284226040000152
在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)
当t∈[0,1]时,点与三角形所在平面发生碰撞,将得到的t带入式(5)中,求出碰撞点;如果
Figure BDA0002284226040000153
区间,点不会与三角形所在平面发生碰撞;
或者具体为:
步骤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获取精确的碰撞点,确定中心质点以及受力点,确定形变区域。
2.根据权利要求1所述的一种软体碰撞检测方法,其特征在于,所述步骤1具体为:按照以点O(ox,oy,oz)为球心,r为半径建立Sphere包围球;
其中,
Figure FDA0003300341790000021
Xmax、Xmin、Ymax、Ymin、Zmax、Zmin分别表示运动物体或静止物体投影在X、Y、Z坐标轴上的最大最小值;
点P(px,py,pz)是运动物体或静止物体上距离包围球球心最远的点,半径r通过式(1)求取:
Figure FDA0003300341790000022
分别建立静止物体和运动物体的包围球(C1,r1)和(C2,r2),C1为静止物体对应建立的包围球球心,C2为运动物体对应建立的包围球球心,r1为静止物体对应建立的包围球半径,r2为运动物体对应建立的包围球半径。
3.根据权利要求1所述的一种软体碰撞检测方法,其特征在于,所述步骤2具体为:
步骤2.1:实时检测两个包围球的球心位置,将运动物体的包围盒球心作为碰撞方位向量的起点,记为C2(Xa,Ya,Za),而将静止物体的包围盒球心作为向量的终点,记为C1(Xb,Yb,Zb);
步骤2.2:计算碰撞方向向量
Figure FDA0003300341790000023
4.根据权利要求1所述的一种软体碰撞检测方法,其特征在于,所述步骤3具体为:
静止物体的预估碰撞范围确定:
步骤3.1,根据静止物体的球心C1(x1,y1,z1)和碰撞方向向量
Figure FDA0003300341790000031
建立模型的切割平面,如式(2)所示;
a(x-x1)+b(y-y1)+c(z-z1)=0 (2)
步骤3.2,切割面上的任一点P和中心点C1的方向向量为
Figure FDA0003300341790000032
向量
Figure FDA0003300341790000033
和向量
Figure FDA0003300341790000034
夹角的具体求法如式(3)所示;
Figure FDA0003300341790000035
夹角小于等于90°的所有点的集合作为预估碰撞范围;
运动物体的预估碰撞范围确定:按照步骤3.1-3.2方法确定运动物体的预估碰撞范围。
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)所示:
Figure FDA0003300341790000041
化简后如式(5)所示:
Figure FDA0003300341790000042
在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)
当t∈[0,1]时,点与三角形所在平面发生碰撞,将得到的t带入式(5)中,求出碰撞点;如果
Figure FDA0003300341790000043
区间,点不会与三角形所在平面发生碰撞。
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进行受力判断,即可得到模型受力后的最终形变范围。
CN201911153563.3A 2019-11-22 2019-11-22 一种软体碰撞检测方法 Active CN111062980B (zh)

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)

* Cited by examiner, † Cited by third party
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 网易(杭州)网络有限公司 游戏包围盒的处理方法、装置及电子设备
CN112949114A (zh) * 2021-02-01 2021-06-11 江南大学 一种酒精灯火苗接触不规则表面燃烧模拟方法
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)

* Cited by examiner, † Cited by third party
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 上海航空电器有限公司 一种虚拟现实碰撞检测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
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) 一种软体碰撞检测方法
CN111583369B (zh) 一种基于面线角点特征提取的激光slam方法
CN103236079B (zh) 一种基于三维模型体素化的内部球改进构造方法
US11442162B2 (en) Millimeter wave radar modeling-based method for object visibility determination
Song et al. Surface-based exploration for autonomous 3d modeling
Zhou et al. T-loam: truncated least squares lidar-only odometry and mapping in real time
CN105046710A (zh) 基于深度图分割与代理几何体的虚实碰撞交互方法及装置
CN104408774B (zh) 一种基于gpu加速的实体面片模型间碰撞检测方法
CN111508282B (zh) 低空无人机农田作业飞行障碍物冲突检测方法
CN109885046B (zh) 一种基于粒子滤波的移动机器人定位加速方法
CN104240290A (zh) 一种基于包围球模型的三维电缆相交检测方法
CN101937453A (zh) 一种基于加权拓扑约束比较的三维模型检索方法
CN115081195A (zh) 一种激光雷达仿真的方法、装置、电子设备及存储介质
CN114022526B (zh) 一种基于三维形状上下文的sac-ia点云配准方法
CN115908541A (zh) 针对室内环境基于曲率信息的车载激光雷达点云聚类算法
CN108334893A (zh) 一种多亮点聚类分析的水下细长体特征识别方法
Sun et al. Mathematical Method for Lidar-based Obstacle Detection of Intelligent Vehicle
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
CN112596659A (zh) 一种基于智能语音和图像处理的绘画方法和装置
Garcia et al. Autonomous sensor planning for 3D reconstruction of complex objects from range images
CN113885522B (zh) 水面机器人避障方法、装置、设备及可读存储介质
Hu et al. Hybrid hierarchical collision detection based on data reuse
Lu et al. Binocular Vision-Based Recognition Method for Table Tennis Motion Trajectory
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