我目前正在编写一个 opengl 2d 粒子系统,但我遇到了更多需要帮助的一般编程问题。
基本上,我需要一种方法来查找粒子是否可能发生碰撞,即广泛的相碰撞检测。
我已经阅读了大量关于使用 Morton 代码和 kd 树进行空间划分的文章,以便剔除许多不需要进行碰撞测试的点。但是,在我看来,kd 树仅在进行最近邻搜索时才有用。相反,我想获得半径内的所有邻居。关键问题是我想对每一点都这样做。
所以我的问题是:使用我的 Morton 代码创建 kd 树有什么好处,或者排序的 Morton 代码列表就足够了吗?理论上,如果我有一个排序后的 Morton 代码数组,对应于排序后的粒子 id,我可以简单地在 Morton 数组中查看当前粒子周围的元素并检查距离吗?我想我会一直这样做,直到距离大于我定义的半径。
那有意义吗?或者我应该选择某种类型的树结构?