确定体素或体素组是否仍连接到对象的其余部分

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

因此,我正在构建基于体素的物理模拟器,可以在其中破坏体素。每个体素化的对象都有一种描述其的“中心体素”,称其为“和平A”。将所有体素模拟为一个,直到将其与“和平A”或与其相连的另一个体素分离,然后将它们(和/或与该体素连接的其他体素)放入具有其自身模拟物理特性的新对象中。这是我的问题所在,如何检查体素是否仍然附着?以最有效的方式?寻路听起来像是当我扩大规模时会降低分配速度,但很乐意尝试找出最佳选择。并在销毁一个体素时立即更新所有体素也听起来不太好。你们有什么天才有想法吗?

这里有一些图纸为了清楚起见(请打扰我不好的鼠标笔迹)

第一张图片,仍然连接了体素:“

第二张图片,当体素分离时:“

algorithm unity3d path physics voxel
2个回答
0
投票
  1. 随机选择一个未连接的对象
  2. 递归获取上/下/左/右对象,直到没有左对象(始终检查对象是否已连接)
  3. 如果场景中没有未连接的对象,请停止
  4. 转到步骤1

0
投票

分段/标记是方法(类似于栅格A *和洪水填充)。

  1. 为每个体素添加一个标记变量/空格

    此标志将用于指示是否使用了体素...并且以后可以用作临时值...

  2. 将所有标志清除为零并设置实际对象ID=1

  3. flag=0拾取第一个体素

  4. 将实际对象ID]充满]

    因此使用4或8个连接泛洪将ID填充到体素标志。

  5. 增量ID并转到#3

  6. [不再有flag=0的体素时停止

    在此之后,该标志保存了原始对象被拆分为的子对象ID,ID保存了新对象的计数+1。

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