双树碰撞检测

我打算使用四叉树来优化碰撞检测。 但是这个四叉树只能处理一种types的对象(所以我使用了一个基类来处理我的对象)。

如果我知道自己的标识它们的types(基类中的一个int)的冲突(由四叉树可以处理的相同基类派生而来)中的四叉树返回两个对象指针之后使用双分派,我怎么能使用这些指针与他们各自的types,以双重调度?

有限的解决scheme:

在进行双重调度之前,我可以创建一个parsing器函数,将两个标识符作为标志组合到一个参数中,并制定一个决定哪种types为obj1和obj2的开关。

不过,它还不是很优雅。 任何解决scheme或更好的方式做到这一点? 谢谢。

这取决于你如何实现双重调度是多么优雅。 您正在有效地尝试分派到能够处理typesX和Y之间的冲突并执行该types对的函数的函数。 这基本上是一个matrix查找,你可以通过在这个matrix中注册碰撞函数来实现它。

假设你的typesID是基于0的数字。 你可以分配一个types为bool(const void*, const void*)的函数指针的二维数组,并根据typesID将函数注册到数组查找中。 因为这个matrix/数组关于对角线是对称的(例如,testing的OOBB vs Capsule与参数交换的Capsule vs OOBB相同),您只能注册该matrix的下三角形。 在调度中,你检查哪个typesID更小,并将其设置为第一个参数,将碰撞testingfunction减半。 然后使用typesID作为matrix的索引从matrix中获取碰撞testing函数。