如何在程序生成的世界中识别特征区域?


26

我正在建造一个岛屿。我使用经典的高度图解决方案:具有爬山功能,避开地图的拐角处,可以确定高度。然后,佩林噪声为我提供了一些应对生物群落的气候变量。现在,我面临着以某种方式联系在一起的两个挑战:

  • 在《矮人要塞》中,尽管不是矩形形状,但游戏似乎是如何“知道”区域并为其命名的,这是世代的整洁方面之一。我希望能够“识别”我的森林,我的河流,我的山丘……不知道我可以使用哪种算法来扫描地图并解释其区域?您将如何存储呢?我正在使用由“ tiles object”的向量的向量构成的基本C ++图形。

  • 这个岛屿应该划分为政治领域,而不仅仅是自然区域。我可以用山脉和河流来做“自然边界”,但是我程序生成的地图却不能保证我会拥有形成王国的漂亮“飞地”。我可以发现自己拥有一个由微型王国包围的巨大的“丝带状”政治地区。另一种可能性是为城市或城堡寻找合适的区域。然后,“发展”周围的政治领域。但是,在尝试设计自己的算法之前,我想再次使用一些众所周知的算法。

这个问题可能解释得太含糊,所以改写它的一种方法是:如何将程序生成的世界划分(不修改!)为适合游戏性的区域?在此先感谢您的帮助。


谢谢您的纠正,也很抱歉我的英语水平太差:)
Raveline

您的英语很棒,只是在StackExchange网站上最好将“标题”作为问题来表达。
dlras2 2011年

Answers:


21

阿米特(Amitp)建议使用分水岭来定义各个区域,如他在多边形地图生成中的文章所述。通过使用他的演示生成地图可以最好地看到分水岭。使用分水岭帮助细分大陆的优势在于,它提供了垂直于海岸线的边界,而山脉通常提供了平行的边界。

如果要细分地理区域,则可以在地图上的各种生物群落上使用山脉,分水岭和边缘检测的组合。

我还要指出,政治区域通常跨越许多地理区域。首先,我将生成地理区域,然后为每个区域分配一个期望等级(是否是海岸?是否有黄金?有耕地吗?)和差旅费(陡峭的地形?茂密的森林?)。然后使用您喜欢的路径算法,生成一个理想区域之间旅行的热图。这些最终将成为您的道路,您可以从那里建立政治边界。这些边界之间通常会有很多道路,而它们之间的道路会更少。


1
谢谢您的帮助。我已经知道Amit的解决方案,尽管我觉得它很优雅,但是我对背后的数学知识还不够了解(我必须研究它们,迟早会做,但现在不做!)。关于分水岭的思考当然可以帮助我,并且调整河流生成算法应该不会太困难。我喜欢您的解决道路和政治边界的解决方案,我必须考虑我将如何实施它,但是这个主意很棒!
Raveline

@Raveline-如果您使用政治界限产生,请在此处评论,让我知道!我很想看看结果如何。
dlras2 2011年

13

为了增加丹·拉斯穆森的答案:

我从Perlin Noise(本项目)切换为使用多边形(本项目)的主要原因之一是,多边形为分配较大的区域(政治区域,森林,沙漠,命名区域,边界等)提供了一些不错的结构。从结构开始,然后生成地图类似于多边形渲染-这相对容易。从地图开始,然后推断结构类似于计算机视觉,这相对困难,但可能。我同时需要结构和地图,因此我决定走相对简单的路线,即在结构(节点和边)的顶部构建地图。

即使那样,我仍然发现我想要比生成的更大的结构。分水岭是建造那些较大结构的一种尝试,但我需要尝试更多将多边形分组在一起的方法。我找不到我满意的东西。

我不确定矮人要塞是如何做到的。鉴于这些家伙多么聪明,如果他们拥有复杂的“计算机视觉”类型的算法,我不会感到惊讶。


我理解其中的原因,尽管我不确定您的走法是否那么简单...由于我的项目相当谦虚,因此我将尝试修补不太复杂但没有多边形的内容,因为这将意味着需要研究更多算法默示。(PS:您的网站是灵感的惊人来源,我喜欢它!)
Raveline 2011年

3
多边形地图生成文章很棒。
Raine

3

对于您的第一个问题,我最好的猜测是使用边缘检测算法来查找您的自然区域(森林,丘陵等)的界限。存在许多针对此类问题的算法。

对于第二个问题,您可以使用自己的想法生成一个城堡(通常是在山顶为防御,在淡水附近),然后使用voronoi算法在每个城堡周围都有区域。您可以使用噪音或生物群系限制使边界更加真实。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.