Arrays 实际上,如何制作八叉树(体素)?

Arrays 实际上,如何制作八叉树(体素)?,arrays,voxel,octree,Arrays,Voxel,Octree,我见过创建八叉树、添加和删除数据的代码,但实际上如何构建八叉树呢?是否有3d体素软件可以保存成某种数组,然后转换成八叉树?或者您可以直接保存到八叉树吗?取决于您的实现- 如果您使用oct树来细分空间,那么通常会向其抛出一堆V3,一旦节点中有超过一定数量的点,您就可以细分并重新分布它们 如果您正在寻找一种存储minecraft样式体素的方法,那么您将进行细分,直到体素大小达到1:1,并将数据存储在叶节点中 数据来自何处取决于您-八叉树是存储、操作和搜索数据的一种方式,而不是文件格式。八叉树中的每个

我见过创建八叉树、添加和删除数据的代码,但实际上如何构建八叉树呢?是否有3d体素软件可以保存成某种数组,然后转换成八叉树?或者您可以直接保存到八叉树吗?

取决于您的实现-

如果您使用oct树来细分空间,那么通常会向其抛出一堆V3,一旦节点中有超过一定数量的点,您就可以细分并重新分布它们

如果您正在寻找一种存储minecraft样式体素的方法,那么您将进行细分,直到体素大小达到1:1,并将数据存储在叶节点中


数据来自何处取决于您-八叉树是存储、操作和搜索数据的一种方式,而不是文件格式。

八叉树中的每个节点都有一个点。这些节点被分成(你猜到了)八个子节点。这些节点依次包含每个、一个点

通常情况下,除非您正在进行一些不正常的碰撞检测,其中每个顶点都计数,否则不会将所有顶点添加到八叉树中。。。并不是说你不能使它快,但是它仍然比由较少数量的节点给出的近似值慢。(这几乎适用于所有情况,近似速度更快)

同样,如果要以高质量的八叉树进行渲染,则八叉树的节点数应该与点的数目相同

现在回答:

  • 创建一个根节点,其边界框将从中心将其包围

  • 插入每个点。这将在相关方向上细分八叉树

  • 插入这些点时,数据将进一步向下移动到叶节点中,叶节点将更紧密地封装模型
  • 此外,在细分时,每个后续节点的边界框都会对半
  • 如果您真的想保存它,可以保存顶点(编号),然后让程序将节点和顶点之间的各种连接写在磁盘上,在磁盘上加载它们的时间与从头开始构建八叉树的时间大致相同
  • 不管怎样,我希望我回答了你的问题