algorithm - 如何在图像中找到多个凹凸形状

标签 algorithm geometry shapes unreal-engine4 concave-hull

所附图片是游戏“可行走空间”的面具,由玩家绘制,因此可以是任何东西。我需要创建碰撞体以防止玩家走到 mask 的蓝色部分(水)。游戏本身在 3D 空间中,掩码用于地形纹理(虚幻引擎 4)。

我目前所做的是将纹理的大小从 2048x2048 减小到 256x256,并在 3D 空间中为 mask 中的每个蓝色像素创建一个碰撞器。这适用于少量蓝色像素,但如果有很多蓝色像素(水),它就不会很好地/根本无法工作。会有太多碰撞器无法即时产生。

所以我想唯一的其他选择是找到构成图像中任意数量凹形边界的点。我将用它来创建墙壁碰撞器。

希望这是有道理的。非常感谢任何帮助。

谢谢 enter image description here

最佳答案

将大小减小到更小后,用 0 和 1 填充 bool 数组,蓝色为 1,没有蓝色为 0。从那里你可以把所有没有零邻居的人都变成零。那是因为如果一个单元格没有空邻居并且它本身不为空,则没有对象可以与其发生碰撞并且您不需要检查。这应该会大大提高性能,但如果您需要更多,您可以找到所有填充单元格的直线并检查与这些单元格的碰撞。所以它看起来像这样:

enter image description here

在这种情况下,您最终不得不检查与 6 个对象而不是 18 个对象的碰撞,并且随着 blob 变大,差异也越来越大。

关于algorithm - 如何在图像中找到多个凹凸形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38436943/

相关文章:

c - 是否可以修复我创建函数树的算法中的这个缺陷?

java - 球-球相交和圆-球相交

c++ - 具有相交多边形边信息的多边形和线段的交集

c# - 碰撞检测自定义草图形状,表示为点列表

java - 我的 SearchInsert 解决方案有什么问题?

algorithm - 我正在寻找一种算法来解决 "sliding puzzle",这是一种将图像分成 4x4 帧中的 16 block 的拼图

java - 使用 libgdx 确定矩形中 4 个多边形的触摸/单击

java - Java中形状的快速联合

silverlight - 如何使多边形的填充渐变为直线?

algorithm - pageranking算法如何处理没有出站链接的网页?