最近在研究Swept Volume的碰撞检测。

来源:互联网 发布:java开发软件要多少钱 编辑:程序博客网 时间:2024/05/18 00:26

在大多数情况下Swept Volume能获得相当精确的碰撞结果,但是对于高速旋转的物体却没有什么太好的办法。即使如此,Swept Volume仍然是一个非常优秀的碰撞检测模型,尤其是应用于柔体和柔体,或者柔体和刚体之间的碰撞。

那么什么是Swept Volume呢?

在空间中已知道时间t的mesh的位置,和时间t0 = t + dt的位置,当dt比较小的时候,我们可以获得mesh在t0时的位置,由于mesh本身没有变化,所以可以把两个时间段的mesh没个顶点对齐的连在一起,即获得了一个有体积的新mesh,这个新mesh就是swept volume。也就是说,在保存mesh数据的时候,需要储存的不仅仅只是mesh的当前顶点数据,还有上一帧的顶点数据,联系起来组成一个swept volume,那么这个时候的碰撞检测就是基于每个mesh的swept volume来进行判断。

为什么要用swept volume呢?

一般情况下,当模拟3D物体运动的时候,很容易出现一种情况,比如说有一张纸和一个体积很小的物体,那么就非常有可能这一帧这个物体在纸的一边,下一帧就运动到纸的另一边了,当然,在现实生活中这是不可能的,但是在普遍利用Euler Method对物体进行模拟的今天,这种情况太常见了。那么如何选择高效的方法来解决这个问题就显得尤其重要了,swept volume就是其中的解。

数学上定义的swept volume。

当然,swept volume的应用远不止于此,大多数实际应用中swept volume都是一个纯数学的模型,比如之前我所考虑过的椭球体碰撞也是属于swept volume的碰撞,也就是给定空间中的一个点,和三个向量,然后由他们分别绕三条半径的轴旋转一周,得到一个椭球体。如果是球体,则只需要空间中的一个点和一条半径就可以确定一个球。这些实际上也是swept volume的应用。

在碰撞检测中,基于各种swept volume的碰撞检测是一个独立的话题,快速的对其求解将带来3D游戏领域物理模拟方面飞速的进步和发展。

PS,最近在对布料做swept volume的碰撞模型检测,碰上不少麻烦事:)一点点慢慢解决吧。

原创粉丝点击