所附图片是游戏“可行走空间”的面具,由玩家绘制,因此可以是任何东西。我需要创建碰撞体以防止玩家走到 mask 的蓝色部分(水)。游戏本身在 3D 空间中,掩码用于地形纹理(虚幻引擎 4)。
我目前所做的是将纹理的大小从 2048x2048 减小到 256x256,并在 3D 空间中为 mask 中的每个蓝色像素创建一个碰撞器。这适用于少量蓝色像素,但如果有很多蓝色像素(水),它就不会很好地/根本无法工作。会有太多碰撞器无法即时产生。
所以我想唯一的其他选择是找到构成图像中任意数量凹形边界的点。我将用它来创建墙壁碰撞器。
希望这是有道理的。非常感谢任何帮助。
最佳答案
将大小减小到更小后,用 0 和 1 填充 bool 数组,蓝色为 1,没有蓝色为 0。从那里你可以把所有没有零邻居的人都变成零。那是因为如果一个单元格没有空邻居并且它本身不为空,则没有对象可以与其发生碰撞并且您不需要检查。这应该会大大提高性能,但如果您需要更多,您可以找到所有填充单元格的直线并检查与这些单元格的碰撞。所以它看起来像这样:
在这种情况下,您最终不得不检查与 6 个对象而不是 18 个对象的碰撞,并且随着 blob 变大,差异也越来越大。
关于algorithm - 如何在图像中找到多个凹凸形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38436943/