首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我怎样才能创造一个“无限”的世界?

我怎样才能创造一个“无限”的世界?
EN

Stack Overflow用户
提问于 2010-06-16 08:54:09
回答 5查看 6.6K关注 0票数 29

我想创造一个无休止的(实际上是一个非常大的)世界的游戏,玩家可以在其中移动。我是否会有时间来实现这个游戏是一回事,但我觉得这个想法很有趣,并希望在如何做它的一些投入。

关键是要有一个世界,在这个世界里,所有的数据都是按需随机生成的,但要以确定性的方式生成。

目前,我的重点是一个大的2D地图,它应该可以显示任何部分,而不了解周围的部分。

我通过编写一个函数实现了一个原型,该函数给出了一个随机但却是确定性的整数,给定地图上像素的x和y(参见我最近关于这个函数的问题)。使用此函数,我使用“随机”值填充映射,然后使用基于周围像素的简单过滤器平滑映射。这使得地图依赖于边缘外的几个像素,但这不是什么大问题。最后的结果是一些至少看起来像地图(特别是一个良好的高度彩色地图)。考虑到这一点,人们可能会首先生成一张更粗的地图,用来产生更大的海拔差异,从而形成山脉和海洋。

不管怎么说,这是我的想法,但我相信已经有办法做到这一点,而且我也相信,考虑到规范,你们中的许多人可以想出更好的想法。

编辑:忘了我问题的链接。

编辑2:我想我需要澄清的是,地图的两个相邻部分(分别生成)需要顺利地连接到彼此,这一点很重要。

编辑3:在评论中询问了更多信息。

下面是一张拍摄的从一页关于分形和Perlin噪声的文章中图片,它看起来很像我以前制作的图像(因为我最好的尝试可能使用了Perlin噪声):

把黑色像素想象成深海,白色像素像山顶。这就是我需要的,一张简单的二维高程图。

我想要做的是从非常大的世界(在MAXINT * MAXINT像素范围内)选择任何矩形并生成它。如果我要生成上面图像的任何部分,它应该得到完全相同的像素,就像我生成了包含较小部分的更大的部分一样。

现在谈谈“无故”的问题:

所需的性能:我的主要目标是基于转弯的RPG,所以性能可能很低,但是我想看看是否有可能创建一个快速的算法是非常有趣的。

内存要求:最好不要预先生成任何内容,但除此之外,内存使用应该与任何普通游戏或应用程序相匹配。

需要的细节:好吧,如果你看一下图像,你就知道了。这将是非常好的,不过,如果它是可以放大和平移,而不必计算地图在最缩放的水平第一。

所需的对象类型和对象属性的生成:没有什么花哨,我很高兴根据上面的图像地形。但我承认,我一直在考虑类似的设置,那里的一切都是非常大的城市。不过,这将是另一个问题。

编辑4:希望是最后一个。

好吧,看了一会儿之后,看来佩林的噪音是最好的选择。不过,我还有一个问题(如果有人愿意回答,因为我已经接受了一个(实际上是两个)答案:)。

perlin噪声函数采用双倍。双打的距离是多少?[0-1]?或者我能高兴地把我的大整数发送进来吗?

EN

Stack Overflow用户

回答已采纳

发布于 2010-06-16 09:38:34

通常情况下,所有地形/世界发电机都以你描述的方式工作--它们能够从非常有限的输入数据(一组参数)中产生巨大的(随机的)世界。

因此,您可能需要进一步限制您的问题。

如果有什么对你有用,或者如果你只是乞求研究--看看不同的焦点和方法,这里

至于随机性/确定性,我不确定你是否真的在这里谈论随机性,这可能有点令人困惑,我想你只想创造出很多变化。所以你可能想把它从你的搜索词中删除。

还可以看看过程生成 (特别是“请参阅”和“外部链接”)。

就我个人而言,我认为在地形综合的概念中有很多希望,在这个概念中,您基本上将真实的地形样本与某种转换操作混合和匹配--这提供了具有所需属性的逼真的地形。

编辑:这是正在处理中中“等离子体分形”(中间点位移)的实现

如果这对您来说足够好的话,那么您可以重新设计算法,允许它生成网格的任何部分(我感觉它会归结为哈希坐标,在连接线周围或任何地方获得随机数种子)。

此外,您可以使用此方法处理不同级别的详细信息,以便生成更多更接近视图的详细信息。

票数 5
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3051864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档