碰撞检测算法

碰撞检测算法有很多,直接检测代价很大,一般使用多种算法进行优化。

首先会对物体生成包围盒,例如AABB包围盒,该盒的面平行于XYZ轴,对包围盒是否碰撞进行检测,如果包围盒碰撞,那么就需要进一步检测。我们还会对物体生成凸多面体进行包围。当然碰撞检测一般针对的是动态物体和动态物体或者动态物体和静态物体。

粗略阶段:

1.利用空间划分,例如使用八叉树,划分后不在同一节点的两物体可以认为不会碰撞。

2.N个物体两两检测的话代价为O(N²) 可以使用Sweep and Prune算法,该算法的思想是在X,Y,Z三个轴上对AABB包围盒进行Overlap检测,包围盒只有在三个轴上的投影重叠才算相交。做覆盖检测前首先要对各个包围盒按轴的坐标进行排序,代价为O(nlogn),但是可以利用帧间一致性(这个思想是如果上一帧排序了,下一帧只要对运动的物体进行插入排序即可,即插入排序)这样代价为O(N)

中间阶段:

将物体用复合包围盒进行包围,例如椅子可以用两个不同大小的长方体包围,遍历这些结构,找到可能碰撞的子包围盒。

精确阶段:

这一阶段需要对凸多面体进行检测,可以使用两个算法。

1.分离轴定理(separating axis theorem) 。对凸多变体每个面作为可能的分离轴的面,作过原点的垂直于分离平面的线,求每个面在该线上投影,看是否重叠,如果所有情况下都重叠,则相交。

2.GJK算法。该算法依赖于闵可夫斯基差,即对AB两物体每对点作减法,看做差后的点是否能形成一个过原点的四面体。GJK是一个迭代算法,即先随意找一个四面体,看哪个方向靠近原点,搜寻原点附近的点加入到当前点集中,不断迭代直到找到一个过原点的单纯体,或者失败。

内容简介  《实时碰撞检测算法技术》详细阐述了与碰撞检测问题相关的高效解决方案及相应的数据结构和算法,主要包括:碰撞检测系统中的设计问题、数学和几何学入门、包围体、基本图元测试、层次包围体技术、空间划分、BSP树层次结构、凸体算法、基于GPU的碰撞检测、数值健壮性、几何健壮性以及优化操作。另外,《实时碰撞检测算法技术》还提供了相应的算法、代码以及伪代码,以帮助读者进一步理解计算方案的实现过程。  《实时碰撞检测算法技术》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。第1章 概述1.1 内容概览1.2 关于本书的代码第2章 碰撞检测系统中的设计问题2.1 碰撞算法的设计因素2.2 应用程序中对象的表达方式2.3 查询类型2.4 环境模拟参数2.5 性能2.6 健壮性2.7 实现与使用的简洁性2.8 小结第3章 数学和几何学入门3.1 矩阵3.2 坐标系统和顶点3.3 向量3.4 质心坐标3.5 直线、光线和线段3.6 平面和半空间3.7 多边形3.8 多面体3.9 凸包计算3.10 域3.11 Minkowski和与Minkowski差3.12 小结第4章 包围体4.1 BV期望特征4.2 轴对齐包围盒4.3 Spheres球体4.4 方向包围盒4.5 球扫掠体4.6 半空间相交体4.7 其他类型的包围体4.8 小结第5章 基本图元测试5.1 最近点计算5.2 图元测试5.3 直线、光线和有向线段的相交测试5.4 其他类型的测试5.5 动态相交测试5.6 小结第6章 层次包围体技术6.1 层次结构设计问题6.2 层次结构的构建策略6.3 层次结构的遍历6.4 包围体层次结构示例6.5 合并包围体6.6 高效的树型表达方式及遍历6.7 通过缓存机制改善查询6.8 小结第7章 空间划分第8章 BSP树层次结构第9章 凸体算法第10章 基于GPU的碰撞检测第11章 数值健壮性第12章 几何健壮性第13章 优化操作参考文献
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值