如何获取不可旋转方形边框内的所有网格单元

问题描述 投票:0回答:1

我有一个网格和一个具有位置和大小的边界框,我想计算该边界框中的每个网格单元以进行碰撞检测。

我不想遍历网格上的每个单元格,因为那样效率非常低,除非我不得不这么做。

我已经与网格发生了点碰撞,所以首先我通过检查与立方体的所有 8 个点的碰撞来进行盒子碰撞。但后来意识到东西可以从盒子中间穿过......

免责声明:我的项目是 3D 的,但将事物从 2D 转换为 3D 通常并不难,所以我用 2D 来提出问题。但 3D 答案是可以接受的。

grid collision bounding-box voxel
1个回答
0
投票

为了计算不可旋转方形边界框中的每个网格单元以进行碰撞检测,您可以使用空间数据结构,例如四叉树(用于 2D)或八叉树(用于 3D)。这些结构对于此类任务非常有效,因为它们允许您将网格划分为更小的部分,从而减少需要进行的检查数量。以下是您可以采取的方法:

1.创建空间数据结构:首先创建包含整个网格的四叉树或八叉树。树的每个节点代表网格的一部分。根节点代表整个网格,每个子节点代表父节点部分的四分之一(在 2D 中)或八分之一(在 3D 中)。

2.将边界框插入树中:将边界框插入树中。此过程涉及检查框与根节点的哪些子节点相交,并将框递归地插入到这些子节点中。这一直持续到盒子被插入到与其相交的最小节点中为止。

3.在树中查询网格单元:现在,您可以在树中查询与边界框相交的所有节点(以及网格单元)。这个过程非常高效,因为它允许您快速丢弃不与框相交的大部分网格。

注意:如果您的边界框正在移动,则每次移动时您都需要更新其在树中的位置。

此方法非常有效,因为它减少了需要检查与边界框是否相交的网格单元的数量。然而,它确实需要一些设置来创建和维护空间数据结构。如果您的网格和边界框都相对较小,则迭代边界框中的所有网格单元可能会更简单、更有效。

© www.soinside.com 2019 - 2024. All rights reserved.