布料模拟碰撞检测的实施总结

1.      多面体之间有两类“基本接触”,即一个多面体的面与另一个多面体的顶点相接触(A类接触)和一个多面体的边和另一个多面体的边相接触(B类接触)。
2.    对于线段和多边形(即使是非凸多边形)的相交问题早有定论,一个简单的两步测试就足以判断是否相交。首先考察线段的两个端点,如果他们在多边形所在平面的同侧,则不相交;否则,考察线段与多边形所在平面的交点,如果交点在多边形内部,则线段和多边形相交,否则不相交。
3. 时空体碰撞检测算法
      给定物体O,以及一个位置函数A,当给定时间作为参数,则A(O)返回的是一个变换矩阵。
4. 扫描体法  
       几何体在一段运动时间内包含的所有点所构成的空间区域称为物体的扫描体。
如果两个物体的扫描体不相交,则两个物体不相交。然而这是充分条件而非 必要条件:扫描体相交的时候物体也可能不相交。
5. 轨迹参数化
       如果物体的运动轨迹可以表示为时间的函数,则能用分析法来确定碰撞是否
发生。考虑一个十分简化的情况,一点沿一条直线运动,起始位置为 P 
,终点为'P ,要判断在从 P 到'P 的过程中,该点是否与以p0 ,p1 ,p2 为顶点的三角形相交,只需要解如下包含三个未知数t,u,v 的向量方程: 

如果方程有解且满足如下条件:
就可以肯定点在运动过程中与三角形相交。
6. 基于图形硬件(GPU)的碰撞检测算法
6.1 图像空间算法
       奇数理论:在物体内部发出一条射线,此射线必定穿过物体表面奇数次。在光线投影的过程中,记录下光线穿过的物体的数目,如果结果为偶数,则说明光线的起点在物体外;否则,在物体内部,此时必发生碰撞。算法采用模板缓冲区来记录光线穿透的前向和后向多边形,模板缓冲区的值在光线遇到前向多边形时增加,遇到后向多边形时减
少。如果最后,模板缓冲区的值非零,则对应的保存在像素中的边在物体内部。
6.2 物体空间算法
将三角形的每个点的坐标用一个1 维的纹理表示,因为典型的图形硬件支持四通道,故只需用三个纹理单元来表示一个三角形。然后通过两次纹理映射在水平和垂直方向上将代表三角形位置纹理映射到一个四边形上。通过模板测试来实现三角形对的初次过滤,通过模板测试的三角形对间用分离轴定理进行三角形对的碰撞检测,与常规的分离轴理论略有差异的是这里只用了 11 个分离轴,而非 15 个。
7 控制碰撞空间域的包围体
       将碰撞检测限制在物体可能发生碰撞的部分大致有三种方法:1运用层次包围体,2判断在运动方向上最靠前的特征元素,3 利用时空相关性追踪最近点。包围体的方法可适用于物体的体表示法和边界表示法,后两种方法主要针对体表示法。
7.1 层次包围体
       层次包围体的的目的是通过包围体的层次结构来近似模拟物体的形状或者分隔物体所占的三维空间,以此来减少两物体间碰撞检测时针对基本几何元素对的基本测试。层次包围体结构有两个优点:很多情况下在结构的第一层就可以对干扰或者不干扰做出明确判断,对某一部分的细化只在该部分可能发生碰撞时才执行。
       包围体技术常与物体的边界表示联合使用,包围边界特征元素的树形层次结构常常可以快速把碰撞检测算法聚焦到可能发生碰撞的区域。一旦两个物体的树形层次结构中某两个包围体相交测试结果为真,则递归向下遍历以该节点为根的子树,直到找到叶子节点,其中包含单个基本几何元素,然后在基本几何元素间作相交测试,找到具体的碰撞信息。
7.2 基于运动方向的包围体 
       在图形学中用于加速多面体渲染的背面裁剪技术(back-face culling)也可被用来提升碰撞检测算法的效率。基本理论是:考虑分属不同多面体的两个面各自的法向量和相对速度,如果某个面的外法向量在相对速度的方向上投影为负,则这个面即被裁剪掉不参与碰撞检测。 
7.3 利用时空相关性追踪最近点
      在给定时刻,物体间的最近点必靠近上一时刻两物体的最近点,这就是所谓时空相关性。将上一个时刻的最近点作为搜索此次最近点的其起始点可以减少搜索的步数,缩短算法时间。
8. 优化碰撞物体对
       作者引入了“警戒值”(awareness)这一概念,它近似于根据估计得到的两物体下一次发生碰撞的时间点,这一警戒值是通过将物体间的距离,相对速度,各自的即时速度和加速度综合考虑而计算得出。根据警戒值的大小顺序将物体对分别放入不同的“桶”(bucket),每个桶的警戒值按 2 的幂的方式递增。算法初始化时,对每一对物体,都计算一个警戒值,后续的每一步都只更新每个桶中一个物体对的“警戒值”,这样具有低警戒值的物体对将被频繁更新,而且随着警戒值的不断更新,物体对可能从一个桶进入另一个桶。
       采取了一个类似的方法,将物体对和他们的最近碰撞事件作为一个整体建立一个最小堆,堆顶元素就是所有物体对中碰撞时间最小的一对。预计的碰撞时间也是综合考虑物体距离,即时速度,各自的加速度,以及假定的加速度上界而得到。在每个碰撞检测的时间点,通过积分物体的运动学方程得到物体的当前位置,然后执行碰撞检测算法,如果没有发生碰撞,则重新计算这对物体的预计碰撞时间,然后更新堆。只有两次检测时间段内扫描体包围盒相交的两个 物 体 才 会 被 选 择 并 包 含 进 堆 中 , n 个 包 围 盒 之 间 的 相 交 测 试 可 以 在内完成,其中 R 是最大包围盒与最小包围盒的尺寸比。
9. OBB树的建立
       分裂可以采取以下方法:考虑OBB 的最长轴,在OBB 的中心处垂直于最长轴建立一个平面,根据多边形(或三角形)中心与此平面的位置关系将基本几何元素分类.
       最长轴上的分离坐标被选定为均值点在最长轴上的坐标。如果不能在最长轴上实现分裂,则选择次长轴,如还不能,就选最短轴。若三个轴都不能实现分裂,则点集被看做不可分。
9.1 快速 OBB 相交测试
       分离轴的理论核心是:若在空间中存在某个轴代表的方向,使得两个物体在轴上的投影区域(线段)不相交,则可以断定两个物体不相交,此轴即为分离轴;如果投影区域相交,则物体可能相交也可能不相交,因此还需要做更进一步的判定。
       当三维空间中两个多面体不相交的时候,必然存在一个平面,或者平行于其中某一个多面体的一面,或者分别平行于两个多面体上的某条线段,使得两个多面体分别位于平面将空间划分出的两个不相交的半空间中。这一定理的直接推论就是两个多面体不相交当且仅当存在一个分离轴,此分离轴垂直于其中一个多面体的一个面,或者分别垂直于两个多面体上的一条边。根据以上结论,由于一个OBB 含有三个方位不同的面和三条方向不同的边,这样一来就得到 15 条待检测的分离轴(6 个方向分别垂直于两个三角形上的某一面,9 个方向来自于两个 OBB 各取一条边对应向量的外积)。如果两个 
OBB 不相交,则在 15 条待检测的分离轴中必然存在某条分离轴分离两个OBB ,如果 15 条都检测完,仍然没有找到合适的分离轴,则可以断定两个OBB 相交。
9.2 对 OBB 碰撞检测算法的改进





















  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值