使用 ALPHA MAP 随机放置对象

Randomly place objects USING ALPHA MAP

我想使用 ALPHA MAP 随机放置对象(只有黑色,没有灰度)。地图上的黑色区域用于确定我们可以放置对象的位置。

我为什么要这样做?例如,我们有一些带有河流的地形。我们想在那个地形上随机放置一个箱子,关键是我们希望我们的箱子不在河流中。我们有一个特殊的位置来放置那个箱子,那个位置可以有一个非常复杂的结构。

带有湖泊和河流的简单地图:

Black/white物品放置位置图:

当然,我们可以使用 Random.Range() 随机点,并通过将其与像素值进行比较来检查每个点:"Is the point on the black area?" 但是如果我们有一个非常小的(<10%总面积)和复杂的"available"区域(例如沼泽中的岛屿),那么就会有非常多的"garbage"点。因此这是一种非常低效的方法。

是否存在获得理想数量的 "available" 点的快速和性能技术?

理论上,您可以按颜色分割 alpha 贴图以获得区域的几何多边形表示,然后您可以在一组 black/white 多边形内生成一个点 algorithmically。 但是,如果您愿意以内存换取速度,则有一个更简单的解决方案:只需将 alpha 贴图表示为像素坐标的两个数组(黑色和白色),然后从所需数组中随机选择一个点。