碰撞检测

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在碰撞检测运行阶段,算法将遍历物体对的层次凸块二叉树。层次树中每个 节点是由OBB包围的凸块。在同时遍历两物体的层次树时,先检测凸块节点 所对应的OBB包围盒是否相交;当两OBB包围盒相交时,就进行凸块之间的相 交检测,实时解码、绘制凸块的压缩三角形带,并对绘制结果进行实时查询 ,分析得出碰撞检测的正确结果
这里 是物体Rxy(A) 在 xoy 平面上的垂直投影区域; Iz(X)物体 X 在 z轴 上所占的区间
对两凸块 A、B 而言,在某象素上 z 轴区间的重叠情况仅有 8 种
我们可以得出投影区间处于分 离状态的充分必要条件为:
凸块之间的相交检测
两个凸块之间的相交检测通过利用图形硬件对它们进行实时绘制来实现
绘制时使用了深度缓存(depth buffer)和模板缓存(stencil buffer)
深度缓存常用于隐藏面消除。模板缓存是帧缓存中的一个平面集,每个象 素包含了一个或多个模板位。 对于任一凸体,经过屏幕象素的任意一条光线与它最多有两个交点,这两交 点构成一段区间。不妨设z轴为深度方向,设两凸块为A和B,则A与B发生碰 撞的充分必要条件为:
凸块的三角形带压缩编码
层次二叉树的遍历
遍历采用广度优先(BFS)的策略进行,具体步骤如下:
凸块OBB包围盒的相交检测方法
基于分离轴定理提出的相交检测方法 首先指定15个分离轴。它们分别为两 个OBB包围盒的6个轴向和由三个轴向 与另三个轴向两两叉乘得到的9个向 量。将这两个OBB包围盒分别向这15 个分离轴投影得到相应的投影区间, 通过检测这些投影区间是否重叠来判 断两OBB包围盒是否相交。
首先,累计凸块所有顶点的坐标向量获取平均向量
其次,由平均向量计算出协方差矩阵C
建构凸块的OBB包围盒
再次,求出协方差矩阵C的特征向量,确定OBB包围盒局部坐标的三个轴 向。由于协方差矩阵C是对称矩阵,其三个特征向量相互正交。将这三个 特征向量单位化后,设定它们为凸块OBB包围盒的局部坐标的三个轴向. 最后,将凸块在三个轴向上的最大投影距离定为OBB包围盒的尺寸大小。
航海模拟器中关键技术研究
碰撞检测过程: 预处理阶段 碰撞检测运行阶段
碰撞检测技术研究
为了能处理任意形状多面体之间的碰撞检测,算法必须经过预处理阶段:
(1)对复杂的非凸物体进行凸表面分解,得到一组源自文库片集合,并针对每一凸片构建与 其相应的凸块; (2)将凸块集合组织为层次二叉树; (3)为层次树中每个凸块构建一个OBB包围盒; (4)对层次二叉树上的所有节点中的凸块进行三角形带压缩编码
基于表面的凸分解
为了保证连通凸片的构造,需要通 过一定的判别准则来选择加入当前 连通凸片的面。 假定当前凸片为c,待判定的候选面 为f,当前面c与f相邻的边为e,f上 与e相对的顶点为v。将v加入c就相 当于把f加入到c中。 凸片生成时的遍历示例
则判定f是否满足条件有以下三个准则:
准则1:e不能为凹边; 准则2:从顶点v看出去,不能观察到当前凸片c在表面S中的面片; 准则3:把顶点v加入到凸块C中后,形成的新凸块C′不能与任何不在原凸片c中的面相交。
基于表面的凸分解
凸分解方法分为两种:一是基于实体的凸分解;二是基于表面的凸分解 (1)基于实体的凸分解是将非凸物体分解为若干凸实体的集合
其中P表示物体,Ci为凸块实体
(2)基于表面的凸分解则是把非凸物体的表面分解成一些凸面片的集
其中P表示物体,ci为凸的表面片,即凸片
Ci CH (ci )
表示凸片ci的凸包体
求出所有质点凸包的协方差矩阵
由于协方差矩阵M是对称矩阵,故所求出的三个特征向量相互正交。将所有质点分别在 三个特征向量的方向上做投影,其中,质点投影间隔距离最长的方向即为质点凸包的 最大伸展方向
建构凸块的OBB包围盒
建构凸块的OBB包围盒
使用基于三角网格体的OBB包围盒的计算方法来建构凸块的OBB包围盒
基于表面的凸分解
将S分解为一组凸片的算法步骤为: (1)首先,在S中选择一多边形作为种子面seed,则种子面seed构成当前连通 凸片c; (2)随后从seed出发,通过深度优先或广度优先搜索物体表面S的对偶图,并 依据一定的判别准则来决定是否把seed的相邻面加入到当前连通凸片c中, 如此递归搜索下去直到判别准则不能成立,此时即找到最大的当前连通凸片 c;最后,重复上述过程直至处理完表面S中的每一多边形,得到所有凸片的 集合。 (3)对所有的凸片求凸包得到与其相应的凸块
基于表面的凸分解
非凸物体的表面分解成 一些凸面片的集
凸块集合
基于表面的凸分解
将一非凸模型分解为较小数目的凸片集合的方法有好几种; Ehmann提出了一种面向多面体表示物体的凸表面分解方法使凸分解结果满 足下面公式所表示的约束关系:
其中S为物体的表面 该约束的用意在于限定任意凸块与物体表面的交集必须是凸块所对应的凸片 该表面凸分解方法依据多面体表面面片的相邻关系,采用对偶图搜索方法和 增量凸壳算法来搜集凸片集合。
基于表面的凸分解
建构层次二叉树
凸分解过程产生出一组凸片集合(ci)和与其对应的凸块集合(Ci) 采用一种自顶向下的方法将凸块集(或称为凸块列表)组织成层次二叉树结构 (1)生成所有凸块列表(L)的凸包(CH),创建出层次树的根节点N,节点数据中 包括CH和指向L的指针; (2)将列表L按照空间位置划分为不相交的两组子列表(L1和L2); (3)分别生成两子列表(L1和L2)的凸包(CH1和CH2),并分别创建两个子节点 (N1和N2),子节点数据分别包括了L1或L2,以及指向CH1或CH2的指针; (4)指定节点N为N1和N2两个子节点的父节点。 (5)递归上述过程,直到节点内凸块列表的个数为1,即子列表中只有一个凸 块的情况。
建构层次二叉树
划分列表的具体步骤是: •· 计算L中每个凸块的质点(COM),并由COM来代表凸块; •· 计算所有COM凸包的协方差矩阵; •· 求出协方差矩阵的特征向量,通过分析找出COM的最大伸展方向; •· 将该最大伸展方向设置为剖分轴; •· 将所有COM垂直投影到剖分轴上,并排序; •· 按所有COM投影点的中间点将L划分为两个分离的列表和。
凸块的三角形带压缩编码
加快绘制速度是提高基于图像碰撞检测算法效率的关键 对于三角形网格物体而言,绘制时若要将三角形的每个顶点都传送给图形硬
件,会有许多重复。为减少重复数据传输的次数,一般可利用相邻三角形共
享边这一属性,重新排列物体中三角形的顺序,形成由一系列连续相邻三角 形组成的三角形带。这样,前一个三角形的两个顶点在绘制与其相邻的下一 三角形时就可以重用。 用启发式搜索法生成三角形带并对三角形带 进行编码的策略。在算法预处理阶段一次性 对物体以及层次二叉树中每个节点凸块的三 角形网格进行处理,得到比较理想的三角形 带,并对这些三角形带进行压缩编码。
相关文档
最新文档