【发布时间】:2014-08-24 03:17:47
【问题描述】:
假设您有一个 AABB(Axis-Aligned Bounding Box...基本上是一个长方体)。你也有一个多面体(一个未定义形式的凸面形状 - 它可以是任何东西,一个长方体、一个球体、一个胶囊,你所知道的只是组成它的平面列表)。
现在假设这个 AABB 是一个 移动 对象。事实上,它正在以光速移动。然而,多面体是不可移动的。 AABB 直接向多面体射击,我们需要知道它到底停在哪里(它在与多面体接触时立即停止。)
有一个很明显的计算方法:把运动切成一堆小块,一点一点地向前走,然后停在它与多面体相交的点之前的点。但这是缓慢且不准确的。
有一种方法只能在 2D 中可行:取 minkowski 差(从另一个对象中减去一个对象的所有点),从中计算一个凸包,然后将一条线跟踪到框中。不幸的是,在 3D 中,凸包是一个非常密集的计算,并且不能针对每个静态多面体对世界中的每个移动对象进行真正的计算,即使通过快速计算的广泛检查也是如此。
所以问题是......计算这个的正确方法是什么,它可以以完美或接近完美的精度工作,并且可以在任何距离上工作?
我的方法(标记为 2D 的方法)是否是正确的方法,只是在我的端实施不佳?有没有更好的方法?
我正在使用 C#,尽管这个问题对于任何语言都应该是相同的。
这是一个 3D 问题,但这里有一个 2D 图表来帮助理解这个想法:
【问题讨论】:
-
平面是否定向?也就是说,对于定义多面体的每个平面,您是否有(或者您可以轻松计算)一个垂直于该平面并指向多面体内部的向量?
-
比如,我是否知道平面的哪一侧指出,哪一侧在里面(并且有与之相关的法线向量)?是的!我愿意。
-
2D 有这个很棒的代码:gamedev.stackexchange.com/questions/29479/…,但它不容易转换为 3D。
标签: math language-agnostic physics game-physics