碰撞检测方法总体上可分为两类:静态干涉检测算法和动态碰撞检测算法,动态碰撞检测算法又分为离散碰撞检测算法和连续碰撞检测算法。其基本原理是基于图形和基于图像的碰撞检测。这两类算法的主要区别在于是利用物体三维几何特性进行求交计算,还是利用物体二维投影的图像及深度信息来进行相交分析。其中在基于图形的碰撞检测上,研究人员已经做了大量的工作,形成了层次包围盒法和空间分割法等成熟算法。
在三维环境中寻找碰撞是非常苛刻的任务。寻找碰撞时间占总运行时间的50%。对于复杂机电系统,三维虚拟原型是非常复杂的,含有成千上万的元素。为此,本文提出了一种能够快速、准确检测碰撞的交迭轴包围盒碰撞检测算法。
1 表面碰撞检测算法原理
交迭轴包围盒是包围盒碰撞检测方法的扩展和延伸,该方法中将一个三维的模型定义为一种表面的集合,每个表面又被单独描绘成一个三角形的合集,采用每个面的轴对齐包围盒和重叠轴对齐,即交迭轴包围盒的方法,筛选出相交的表面。表面碰撞检测算法的体系结构如图1所示。
图1 表面碰撞检测算法体系结构
两个实体A和B,定义MAB为实体B与实体A的交迭处的变换矩阵。
图2中每个实体被定义为AABB,判断两个实体A和B是否相交,如果这对轴对齐包围盒不重叠,则A与B不相交;如果相应的轴对齐包围盒重叠,则A和B是两个碰撞的候选对象。在这种情况下,重叠轴对齐包围盒OAABB(A,B)被确定,如图2所示。
图2 二维中OAABB概念
2 碰撞表面判定
为了提高表面碰撞检测算法的性能和检测速度,使用每个面的轴对齐包围盒和重叠轴对齐包围盒,即交迭轴包围盒方法,筛选碰撞表面,如图3所示。
考虑OAABB(A,B)由两个相交候选对象,与AABBs表面不相交的OAABB被筛选掉。对每个对象的剩余m表面,分别判定与表面AABBs是否相交。这一步复杂度为O(m2)。实施这一步骤程序结构如下:
图3 交迭轴包围盒碰撞表面筛选
3 多边形相交管理程序
确定了可能碰撞的表面,需要从这一对表面找出需要检查的每一对多边形碰撞。两个多边形相交是一个费时的运算操作。应该放弃AABBS不能重叠相交的多边形,在这一点上,该算法采用重迭轴对齐包围盒,如图4所示。
图4 重迭轴对齐包围盒筛选过程
当且仅当AABBS与OAABBA相变,两个多边形才可能碰撞。如果没有相交,那么相应的多边形过滤出来。循环的最后,筛选出相交的多边形,即得到了最终的碰撞检测结果,实施这一步骤程序结构如下:
4 实例分析
对如图5所示的结构,采用传统包围盒算法和交迭轴包围盒算法进行比较分析。
从图5所示的信息化模型中提取表面信息和细化相互独立的表面,将独立的表面和与它们相对应的多边形数据存储在一个结构环境中。
图5 典型实例
表1是在执行实例的装配过程中,通过程序反馈给出的各项监测数据。表1表明交迭轴包围盒算法比传统包围盒算法更快速,相差一个数量级。其根本原因在于交迭轴包围盒算法比传统包围盒算法减少轴对齐包围盒和三角形测试的数目。
表1 交迭轴包围盒算法与传统包围盒算法结果对比
5 结论
交迭轴包围盒算法是一种快速碰撞检测算法,确定在虚拟装配环境中三维装配模型表面的精确碰撞。该方法OAABBs过滤掉那些不会相交的元素,具有高度的并行性、快捷性,提高了虚拟装配的仿真性能。尤其对复杂机电系统而言,提高其仿真运行的速度,具有非常重要的意义。