图像的快速碰撞检测算法

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

违 了 则1 反 准
违 了 则2 反 准
Chinagraph’2 002
基于表面的凸分解
一个简单的表面凸分解实例
Chinagraph’2 002
基于图像的碰撞检测算法
预处理阶段
输入物体模 型
进行表面凸分 解得到一系列 凸面片
建构节点为凸 体的层次二叉 树
对层次树节点 进行三角形带 压缩编码
碰撞检测阶段
输入凸体A 和凸体B
清深度缓存与 模板缓存
调用myRender- SetStencilByZ(B); 调用myRender- TestStencilByZ(A);
}
true 调用myRender- SetStencilByZ(A); SecondRender ?= false false
for(MOR上所有象素点){ if(模板缓存值为 2) return(true); //发现碰撞 } // end for
– 多物体场景 – 一对物体的场景
• 算法稳定性
– 碰撞检测时间的变化率η:
Chinagraph’2 002
η=
ti − t × 100 % t
两个测试场景
Chinagraph’2 002
实验结果
45
120
平 均 碰 撞 检 测 时 间 (ms)
100
平 均 碰 撞 检 测 时 间 (ms)
RAPID RECODE 本算法
基于图像的快速碰撞检测算法
范昭炜 万华根 高曙明
浙江大学CAD&CG国家重点实验室
Chinagraph’2002, Beijing September 26, 2002
概要
• 背景 • 相关工作 • 基于图像的碰撞检测算法 • 算法实现与实验结果 • 结论
Chinagraph’2 002
背景
• 碰撞检测的重要性
基于表面的凸分解
• 目的
– 把非凸物体的表 面分解成一些凸 面片的集合
F1 凸 边 凹 边 S F2 S F1 F2 种 面 子
• 方法
– 基于共轭图的搜 索方法
• 选定种子面 • 遍历共轭图 • 三个判别准则
Chinagraph’2 002
违 了 则1 反 准
违 了 则2 反 准
基于表面的凸分解
Chinagraph’2 002
凸块层次二叉树的建构
用质点代表凸 块的位置
求所有质点凸 包的协方差矩 阵
特征向量提取 求出最大伸展 方向
将有序数值列 表按一定方法 划分为两组
所有质点在剖 分轴上的垂直 投影排序
设置该方向为 剖分轴
凸块集的划分过程
Chinagraph’2 002
基于图像的碰撞检测算法
预处理阶段
输入物体模 型
进行表面凸分 解得到一系列 凸面片
建构节点为凸 体的层次二叉 树
对层次树节点 进行三角形带 压缩编码
碰撞检测阶段
判断并返 回检测结 果
在层次树的节 点对之间进行 基于图像空间 的碰撞检测
遍历物体对的 层次二叉树
利用掠扫和删 减技术快速找 到可能发生碰 撞的物体对
算法整体框架
Chinagraph’2 002
判断并返 回检测结 果
在层次树的节 点对之间进行 基于图像空间 的碰撞检测
遍历物体对的 层次二叉树
利用掠扫和删 减技术快速找 到可能发生碰 撞的物体对
算法整体框架
Chinagraph’2 002
凸块层次二叉树的建构
• 对象
– 一组凸块的集合
• 建构策略
– 自顶向下 – 自底向上 √
• 凸块集的划分
-120%
-120%
本算法在测试场景二中的 碰撞检测时间变化率
RAPID 算 法 在 场 景 二 中 的碰撞检测时间变化率
Chinagraph’2 002
结论-算法特色
通用性 可处理任意形状 的物体;
可发展性 由于充分利用了图形 硬件,解放了CPU, 相信随着图形硬件的 高速发展,算法将有 更好的发展前景。
return false; //没有碰撞发生
Chinagraph’2 002
核心算法流程
SecondRender = false; for(MOR上所有象素点){ myRenderTestStencilByZ(X){ 求出A,B在投影面上的 if(模板缓存值为2) 用模板测试只处理值为1的象素点; 最小重叠区域(MOR); return(true); //发现碰撞 禁止写帧缓存;深度测试是否满足条件Z(X)<=Zmax; if(模板缓存值为3) 上面两个测试通过,则模板缓存值加1; SecondRender = true; 禁止写深度缓存; } 清深度缓存与 三角形带解码绘制X; //正面和背面 模板缓存
计算机 动画 碰撞检测
• 待解决的问题
– 实时性 – 大规模场景
虚拟现实
计算机 图形学
• 本文的研究目标
物理仿真
其他相关 领域
– 提高碰撞检测算法效率 – 面向大规模场景
Chinagraph’2 002
相关工作
• 碰撞检测算法分类
– 基于物体空间 – 基于图像空间
Chinagraph’2 002
相关工作
核心算法流程
输入凸体A 和凸体B
求出A,B在投影面上的 最小重叠区域(MOR); 禁止写帧缓存;
SecondRender = false; for(MOR上所有象素点){ if(模板缓存值为2) return(true); //发现碰撞 if(模板缓存值为3) SecondRender = true; }
输入凸体A 和凸体B
清深度缓存与 模板缓存
调用myRender- SetStencilByZ(B); 调用myRender- TestStencilByZ(A);
for(MOR上所有象素点){ if(模板缓存值为 2) return(true); //发现碰撞 } // end for
调用myRender- TestStencilByZ(B);
清深度缓存与 模板缓存
调用myRender- SetStencilByZ(B); 调用myRender- TestStencilByZ(A);
Baidu Nhomakorabea
清深度缓存与 模板缓存 true 调用myRender- SetStencilByZ(A); SecondRender ?= false false for(MOR上所有象素点){ if(模板缓存值为 2) return(true); //发现碰撞 } // end for
凸块的三角形带压缩编码
• 目的
– 优化三角形带,加快绘制过程
• 方法
– 借鉴 Isenburg, 2000 三角形带压缩编码 的思想
• 实现
– 预处理阶段
• 三角形带压缩编码
– 碰撞检测阶段
• 对三角形带进行解码绘制,提高绘制速度,进 而加速基于图像的碰撞检测过程中的物体绘制
Chinagraph’2 002
测试场景一的实验结果
测试场景二的实验结果
Chinagraph’2 002
实验结果
120% 碰撞检测时间变化百分率 碰撞检测时间变化百分率 90% 60% 30% 0% 50 100 150 200 250 300 350 400 450 500 -30% -60% -90% 物体运动的帧数
120% 90% 60% 30% 0% 50 100 150 200 250 300 350 400 450 -30% -60% -90% 物体运动的帧数 500
进行表面凸分 解得到一系列 凸面片
建构节点为凸 体的层次二叉 树
对层次树节点 进行三角形带 压缩编码
碰撞检测阶段
判断并返 回检测结 果
在层次树的节 点对之间进行 基于图像空间 的碰撞检测
遍历物体对的 层次二叉树
利用掠扫和删 减技术快速找 到可能发生碰 撞的物体对
算法整体框架
Chinagraph’2 002
• 基于物体空间的碰撞检测
– 处理凸体
• M.Lin, et al(UNC) I-COLLIDE, SWIFT • K, Chung and W. Wang QCOLLIDE • Mirtich VCLIP
– 可处理非凸物体
• Gottschalk, M. Lin, et al RAPID V-COLLIDE • T. Klosowski, et al Chinagraph’2 • S. Cameron 002
– 利用硬件加速,只要几何裁剪无需光栅绘 制 – 将层次背面剔除技术应用到碰撞检测算法 中 – 自适应系统框架,能自动最优化平衡CPU 和GPU的负载 – 利用多图形通道多CPU提高效率
Chinagraph’2 002
谢谢!
基于图像的碰撞检测算法
预处理阶段
输入物体模 型
进行表面凸分 解得到一系列 凸面片
建构节点为凸 体的层次二叉 树
对层次树节点 进行三角形带 压缩编码
碰撞检测阶段
判断并返 回检测结 果
在层次树的节 点对之间进行 基于图像空间 的碰撞检测
遍历物体对的 层次二叉树
利用掠扫和删 减技术快速找 到可能发生碰 撞的物体对
调用myRender- TestStencilByZ(B);
return false; //没有碰撞发生
Chinagraph’2 002
算法实现与实验结果
• SGI ONYX2(195 MHz R10000 MIPS)工作站 Infinite Reality(IR2e) 图形卡 • OpenGL/GLUT/C++ • 两类场景
QUICKCD SOLID
相关工作
• 基于图像空间的碰撞检测
Shinya and Forque, 1991 Rossignac, Siggraph’92

Baciu(RECODE), 1999
Myszkowski, 1995
Chinagraph’2 002
基于图像的碰撞检测算法
预处理阶段
输入物体模 型
调用myRender- TestStencilByZ(B);
return false; //没有碰撞发生
Chinagraph’2 002
核心算法流程
SecondRender = false; for(MOR上所有象素点){ 求出A,B在投影面上的 myRenderSetStencilByZ(X){ if(模板缓存值为2) 剔除物体X的正面; 最小重叠区域(MOR); return(true); //发现碰撞 禁止写帧缓存; 用模板测试操作给模板缓存置1; if(模板缓存值为3) 允许写深度缓存; SecondRender = true; } 三角形带解码绘制X; 清深度缓存与 } 模板缓存 true 调用myRender- SetStencilByZ(A); SecondRender ?= false false
Chinagraph’2 002
基于图像的碰撞检测算法
• 核心算法思路
– 凸体之间进行检测 – 将三维物体的碰撞检测问题降维到 二维图像空间,并最终简化到深度 方向上的一维区间进行重叠检测 – 一维区间重叠与模板缓存
Chinagraph’2 002
基于图像的碰撞检测算法
Chinagraph’2 002
40 35 30 25 20 15 10 5
RAPID RECODE 本算法
80
60
40
20
0 2500 5000 7500 10000 12500 15000 20000 25000
0 2500 5000 7500 10000 15000 17500 20000
三角面片总数(个)
三角面片总数(个)
• 三个判别准则
– 准则1:遍历经过的 边不能是凹边; – 准则2:在当前处理 面的远顶点(即除邻 边的两顶点之外的顶 点)处不能看到当前 凸片中任一面的外表 面; – 准则3:当增加当前 面后,所形成的新凸 块不能与任何非原凸 片上的面相交。
凸 边 凹 边 F1 S F2 S F1 F2 种 面 子
高效率 通过建构结点为凸体 的层次二叉树以及采 用基于三角形带的绘 制加速技术,有效提 高了算法的效率; ;
Chinagraph’2 002
平稳性 继承了基于图像碰撞检测 算法的优点,对同一复杂 度的场景而言,碰撞检测 时间变化不大,具有较高 的平稳性,有利于预测碰 撞检测过程;
结论
• 今后的工作
相关文档
最新文档