谈虚拟现实中的碰撞检测问题(打)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用方法有两种, 一是让叶节点包含多个图元, 这样就 可以使 BV树的深度比完全树的深度小; 第二种方法 是减少每个内部节点需要的字节数和每个叶节点需
法研究 [ J]. 河海大学学报 ( 自然科学版 ). 2005, ( 3) . [ 4] 丁佳. 大型复杂场景中快速碰 撞检测技术 的研究 [ D ] . 成都电 子科
图 3 OBB包围盒示意
包围盒法采用 的基本思想是使用简单的几何体 来代替复杂的几何体, 这样可以排除大量不可能相交 的几何体, 可以大大地提高碰撞检测的效率。基于层 次包围盒的算法核心就是: 通过 遍历这两棵树, 确定 在当前位置下, 两个对象是否发生碰撞。这是一个双 重遍历的过程, 算法首先用一个对象的根节点遍历另 一个对象的包围盒树, 如果能到 达叶节点, 再用该叶
2 碰撞检测的实现方法
个部分的包围盒和相应的节点, 将这些新节点作为根 节点的子节点; 依次按照第二步的方法分裂每个子节
最原始简单的碰撞检测方 法是一种蛮力的计算 点对应的模型, 递归地建立包围盒树。比较典型的包
方法, 即对两个几何模型中的所有几何元素进行两两 围盒类型有沿坐标轴的包围盒 AABB、包围球、方向包
3: if( overlap( TA, TB) ) TRUE;
sion的 children域中, 将 co llide设为 false即可。在必
4: e lse if( isNo tLeaf( A ) and isNotL eaf( B ) ) / /A、B 须保留碰撞检测的情况下, 可以对复杂的节点使用碰
文献标识码 : A
文章编号: 1008- 2093( 2009) 06- 0107- 03
1 引言
2. 1 层次包围盒 层次包围盒是 碰撞检测算法中广泛使用的一种
虚拟现实 ( V irtual R ea lity, 简称 VR ) 是指通过人 算法, 它是解决碰撞检测问题固有时间复杂性的一种
的多种感知通道 ( 视觉、听觉、触觉、嗅觉、味觉等 ) 进 行实时模拟与交互的高级人机交互系统 [ 1] 。虚拟现
过程中测试 物体的包 围盒对是 否发生碰 撞的时 间。
例如测试手术刀的包围盒是否与被切割组织的包围
盒是否发生交叠的时间。交叠 测试时间是实时检测
效率的决定因素, 是衡量层次包围盒法进行碰撞检测
性能优劣的关键。交叠测试的 时间可以由如下公式
( 1) 来计算 [ 4] :
Tt = N v ∀ Cv + Np ∀ Cp + N u ∀ Cu
VR 技术的主要目标之一是允许用户以尽可能自 比直接用两物体进行计算节省了大量的时间, 所以提
然的方式与虚拟世界直接交互。因此 VR系统的用户 高了碰撞检 测的效率, 当然 检测到包 围盒发 生了碰
希望虚拟物体给人的感觉是 物理存在 。当参与者 撞, 并不意味着物体之间一定发 生了碰撞, 若此时系
伸手去拿一个杯子, 系统必须能检测到手和杯子之间 统欲得到精度更高的检测结果, 还需对物体之间的位
公式 ( 1)
如式 ( 1) 中, Tt 是交叠测试的总时间, Nv 是需要
参与测试的包围盒对的总数目; Cv 是测试一对包围盒
需要的时间; Np 是待检测包围盒对数; Cp 是检测一
对包围盒是否发生碰撞的时间; Nu 是发生形变的包围 盒数目; Cu 是更新一个发生形变的包围盒的平均时
间 (如图 2)。我们可以看到, 对于固定的待检测对
5 结束语
节点, B 不是
虚拟现实场景 的碰撞检测是虚拟现实系统的关
12: for每个子节点 CB# BC
键问题, 在虚拟场景中的实现有效的碰撞检测也是当
13: F indF irstH itCD ( CB, A ) )
今虚拟现实研究的一个重点 和热点。碰撞检测应用
14: else
范围相当广泛, 特别是在各种仿 真模拟试验中, 起着
第 17卷 第 6期 2009年 11月
河南机电高等专科学校 学报 Jou rn al of H enan M echan ical and E lectrical E ngineering C ollege
V o .l 17 ! . 6 N ov. 2009
谈虚拟现实中的碰撞检测问题*
钟帅
( 扬州职业大学, 江苏 扬州 225009)
主要为两大类: 层次包围盒法和空间分解法。
* 收稿日期: 2009 04 16 作者简介: 钟帅 ( 1981 ), 男, 江苏泰州人, 助教, 本科, 主要从事计算机应用研究。
1 07
河南机电高等专科学校学报
2009年 6期
图 1 包装盒结构层次示例
2. 2 空间分解法 空间分解法是将整个虚拟 空间划分成相等体积
碰撞检测的边界。利用碰撞代理作碰撞检测要快得
7: F indF irstH itCD( CA, B) )
多。使用碰撞代理 只要在 proxy 域 中指定一 个能将
8: e lse
ch ildren 域中所 有的节点 包围的简 单几何体 就可以
9: fo r每个子节点 CB# BC
了。
10: F indF irstH itCD ( A, CB) ) 11: else if( isL eaf( A ) and isNotLeaf( B) ) / /A 是叶
相交测试, 尽管这种方法可以得到正确的结 果, 但当 围盒、固定方向凸包等。层次包围盒方法应用得较为
模型的复杂度增大时, 它的计算量很大, 测试将十分 广泛, 适用复杂环境中的碰撞检测。 缓慢。
碰撞检测一直是虚拟交互技术研究的关键问题。
许多学者在碰撞检测方面进行了广泛、深入的研究,
并提出了多碰撞检测的算法。现有的碰撞检测算法
虽然在任意几何体之间进行碰撞检测时, 使用层次包
究 [ J]. 软件学报, 2001, ( 7) .
围盒结构的效率较高, 但它仍旧有一个较大的问题就 [ 3]刘惠义, 邱云, 张春红. 虚拟 视景交 互漫游 系统的 实时碰 撞检 测方
是内存需求。随着模型复杂度的加大, 层次包围盒树 所需要的内存空间也迅速增加。减少内存需求的常
实又可称 为人 工现 实 ( A rtificia l R ea lity )、虚 拟环 境 ( V irtua l Environm ent) 等。
有效的方法。它的基本思想是利用体积略大而几何
特征简单的包围盒来近似地描述复杂的几何对象 (如 图 1) [ 2] , 由于包围盒形状 比较简单, 计算 容易, 一旦 发现包围盒没有碰撞就可以排除两物体之间的碰撞,
为 EXAM INE 时, 可以将场景中的物体的碰撞检测关
1: if( isL ea f( A ) and isL eaf( B ) ) / /A、B 都是叶节 闭。浏览方式为 WALK 时, 浏览者不能离开地面, 对

于位置较高的物体也应该关闭 碰撞检测。要关闭一
2: fo r每一个三角形对 TA # AC 并且 TB# BC 个几何节点的碰撞检 测, 可以将几何节点放 入 Co lli
碰撞关系的建立称为碰撞检测 ( Co llision Detect ion )。 图。大多数层次结构都采用自上而下的方式, 即首先
碰撞检测是虚拟场景实时漫游和人机交互必不可少 建立模型的包围盒, 作为包围盒 树的根节点; 然后按 的一部分, 是仿真物体间进行交互的先行步骤 [ 2] 。 照一定的规则将模型分成两个或者多个部分, 建立每
的子集必定不相交, 从而不需要对子集中的元素作进
在 VRM L 中默认情况下, 碰撞 检测是打开的, 为
一步的相交测试。其伪代码如下:
了提高渲染的速度, 对于用户没有可能接触到的几何
F indF irstH itCD ( A, B )
节点可以关闭碰撞检测。如浏览者的浏览方式被定
Return( { TRUE, FALSE} )
都不是叶节点
撞代理。直接的碰撞检测是依据几何体的外形进行
5: if( Vo lum e( A ) > Vo lum e ( B ) ) / /为了获得更 的, 如果几何体过于复杂, 碰撞检测效率将变得很低。
好的性能
碰撞代理利用一个简单的几何体, 如 box、sphere作为
6: fo r每个子节点 CA# AC
15: for每个子节点 CA# AC
十分重要的作用。而精确的结果往往需要引入连续
16: F indF irstH itCD ( CA, B) ) / /B是叶节点, A 不 碰撞检测算法。如何加速连续碰撞检测, 实现快速精

确的碰撞仿真模拟成为众多研究者关注的领域之一。
17: return FALSE;
摘要 : 虚拟现实环境中的碰撞检测是计算机图形学、计算几何、仿真 建模和 机器人 路径规 划等领 域的重 要问题。
文章 讨论了碰撞检测过程中的算法和包围盒树的交叠测试时 间以及碰 撞检测的优 化手段, 进一步提 高了碰撞 检 测的 效率。
关键 词: 虚拟现实; 碰撞检测; 包围盒; 交叠测试
中图 分类号: TP 333. 96
( 责任编辑 吕春红 )
4 碰撞检测的优化措施
参考文献: [ 1] 汪成为, 高文, 王行仁著. 灵境 ( 虚拟现实 ) 技术的理论、实现 及应用
层次包围 盒结 构是最 常使用 的碰撞 检测结 构。
[ M ] . 北京: 清华大学出版社, 1996. [ 2]魏迎梅, 吴泉源, 石教英. 碰 撞检测 中的固 定方向 凸壳包 围盒 的研
的单元格, 只对占据同一单元格或相邻单元格的几何 对象进行相交测试。首先利用空间区域划分, 迅速剔 除不相邻的物体, 这一点能有效地解决时空相关性对 存在高速运动物体的情况不适用的问题, 同时找出可 能发生碰撞的物体对; 然后在物体的内部结构中增加 一个链表, 用于存放与此物体相邻的需要与其进行碰 撞检测的其他物体; 在碰撞检测的时候, 设置一个阈 值, 这个阈值可以使得在最有效的情况下利用时空相 关性来检测碰撞。比较典型的方法有 K - D 树、八叉 树和 BSP 树、四面体网、规则网等。空间分解法通常 适用于稀疏的环境中分布比较均匀的几何对象的碰 撞检测 [ 3] 。
象, Nv 是一个定值。提高包围盒的复杂度, 也就是加 节点遍历第一个对象的包围盒树, 如果也能到达பைடு நூலகம்对
强包围盒的紧密性能使得 Cv 增大, 而相反减小了 N p。 象的叶节点, 则进一步进行三角形的相交测试。如果
10 8
钟帅: 谈虚拟现实中的碰撞检测问题
两个节点上的包围盒不相交, 则它们所包围的三角形 要的字节数。
3 包围盒树的交叠测试
3. 1 交叠测试的时间 使用包围盒法进行碰撞检 测的时间主要由三部
分组成: 包围盒构造时间 T c, 包围盒更新时间 T r, 交叠 测试时间 T t。交叠测试时间 T t是指在实时碰撞检测
图 2 层次包围盒的 交叠测试
3. 2 交叠测试的算法 使用层次 OBB进行碰撞检测, 其目的是通过两个
对象的包围盒树中各结点所对应的 OBB 包围盒之间 的重叠测试, 尽可能早地排除所有不可能相交的基本 图元对, 仅对有可能相交的基本图元对进行精确的相 交测试。因此, 包围盒之间的交叠测试的速度直接影 响到碰撞检测的速度。
OBB 包围盒间的重叠测试是基于分离轴理论的。 若一对 OBB 间存在一 条分离轴, 则可 以判定这两个 OBB 不重叠。对任何两个不相交的凸三维多面体, 其 分离轴要么垂直于任何一个多面体的某一个面, 要么 同时垂直于每个多面体的某一条边。因此, 对于一对 OBB, 只需测试 15条可能是分离轴的轴 (每个 OBB的 3个面方向再加上每个 OBB 的 3 个边方向的两两组 合 ), 只要找到一条这样的分离轴, 就可以判定这两个 OBB 是不 重叠 的, 如果 这 15 条 轴都 不能 将这 两个 OBB 分离, 则它们是重叠的 [ 5 ] , 如图 3, L 是 OBB 包围 盒 A和 B 的分离轴。
有接触后, 才能进一步仿真拿起一个杯子的情景。因 置关系进一步计算, 即进行碰撞的精确检测。采用包
此 VR 中动态物体与静态物体之间或动态物体与动态 围盒进行碰撞检测的最大好处是可以实现快速碰撞
物体之间的交互基础是碰撞检测。在虚拟现实技术 检测, 包围盒树可以按照自下而上的方式或者自上而
中, 把这种用户与虚拟物体或虚拟物体 之间的接触、 下的方式构造, 这要取决于包围盒的种类和算法的意
相关文档
最新文档