如何混合正常和基于Quadtree的碰撞检测



我为所有静态碰撞对象设置了一个Quadtree,它非常适合碰撞检测和射线播放

但是,由于我也有非静态碰撞对象,当我射线播放时,我想将它们作为射线

的可相互关系对象包含

实现这一目标的最好(在绩效方面)是什么?我目前的想法是:

1)克隆Quadtree,添加非静态对象,然后将其用于raycast

2)将非静态对象添加到当前的Quadtree中,其中一些标志基本上可以防止Quadtree拆分四轮,即使在四分光中允许的孩子还要多。然后,一旦射线播放完成后,Quadtree将不得不自行"清理"

3)确定最接近的静态对象碰撞(使用Quadtree)之后,只需迭代所有非静态对象,然后查看射线是否与它们相撞,然后检查碰撞点是否比最近的静态静态点接近对象碰撞点

所有这些想法似乎有些麻烦,所以我正在寻找任何可能是表现更多的想法

如果很重要,我正在使用Java

在1)克隆Quadtree如果您有10个以上的对象,则可能非常昂贵,所以我不会那样做。

在2)为什么不保留非静态对象的列表?只需将所有对象添加到树上(我不看看为什么分裂是一个问题),然后从树上重新安装它们后。

在3)如果您有许多非静态对象,这是非常昂贵的,但是如果您很少,则可能是最便宜的解决方案。

更多想法:

4)为非静态对象构建第二个四轮晶式,并进行碰撞检测(类似于5))。碰撞后,只需丢弃第二棵树。

5)如果分裂节点确实是一个问题,那么使用pH-树怎么样?它就像Quadtree一样,但是它的行为比Quadtree更静态(没有插入/删除都会修改多个节点(除了创建一个删除一个空节点外)。

>

6)根据非静态对象的速度,您可以使用"移动对象树"(仅Google为其,有一些专用的结构)。如果对象不太快,则pH-Tree可能再次是一个不错的选择,它具有专用的移动/更新方法。

相关内容

  • 没有找到相关文章

最新更新