Pet*_*ric 29 random algorithm dictionary
我想创造一个游戏,其中有一个无尽的(实际上是一个非常大的)世界,玩家可以在其中移动.我是否会绕过实现游戏是一回事,但我发现这个想法很有意思,并且想要了解如何做到这一点.
重点是拥有一个所有数据按需随机生成的世界,但是以确定的方式生成.
目前,我专注于一个大的2D地图,从中可以显示任何部分,而不需要了解周围的部分.
我已经通过编写一个函数实现了一个原型,该函数给出了一个随机的,但是确定性的整数,给定了地图上像素的x和y(参见我最近关于这个函数的问题).使用此功能,我使用"随机"值填充地图,然后使用基于周围像素的简单过滤器平滑地图.这使得地图依赖于其边缘之外的几个像素,但这不是一个大问题.最终的结果是至少看起来像地图(特别是具有良好的高度颜色图).鉴于此,人们可能首先生成一个较粗糙的地图,用于产生更大的海拔差异,以创建山脉和海洋.
无论如何,这是我的想法,但我确信已经有办法做到这一点,我也相信,鉴于规范,你们中的许多人可以提出更好的想法.
编辑: 忘记链接到我的问题.
编辑2: 我想我必须澄清,分别生成的地图的两个相邻部分需要平滑地相互连接是很重要的.
编辑3: 评论中要求提供更多信息.
这是一个关于分形和Perlin噪声的页面图像,看起来很像我以前自己制作的(因为我最好的尝试可能使用了Perlin Noise):
http://www.neilblevins.com/cg_education/fractal_noise/perlin_fractal_max_levels2.jpg
将黑色像素视为深海,将白色像素视为山顶.这就是我需要的,一个简单的2D高程图.
我想要做的是从非常大的世界中选择任何矩形(在MAXINT*MAXINT像素的范围内)并生成它.如果我生成上面图像的任何部分,它应该得到完全相同的像素,就像我生成一个包含较小部分的较大部分一样.
现在谈谈Unreason的问题:
所需的性能:我的主要目标是基于回合制的RPG,因此性能可能非常低,但我认为看看是否可以创建快速算法会非常有趣.
内存要求:最好不要预先生成任何东西,但除此之外,内存使用应该与任何普通游戏或应用程序匹配.
要求的细节:嗯,如果你看一下图像,你就会明白.如果可以缩小和平移而不必首先在最放大的水平计算地图,那将是非常好的.
生成所需的对象类型和对象属性:没有什么花哨的,我对根据上图的地形感到满意.但我承认我一直在考虑类似的设置,一切都是一个非常大的城市.不过,那将是另一个问题.
编辑4:希望是最后一个.
好了,看了一下之后,Perlin Noise就好了.我还有一个问题(如果有人现在关心回答我接受了一个(实际上是两个)答案:)).
perlin噪音功能需要两倍.这些双打的范围是多少?[0-1 [?或者我可以愉快地发送我的大整数?
通常,所有地形/世界生成器都以您描述的方式工作 - 它们能够从非常有限的输入数据(参数集)中生成大量(随机查看)世界.
因此,您可能希望对您的问题设置进一步的限制.
如果有什么对您有用或者您只是想研究 - 请看一下这里的不同重点和方法.
至于随机性/确定性,我不确定你真的在这里谈论随机性,它可能有点令人困惑,我想你只想创造很多变化.因此,您可能希望从搜索字词中删除它.
看看也是在程序上一代(尤其是"见"和"外部链接").
就个人而言,我认为在地形合成的概念中有许多前景,你基本上将真实地形样本与某种变换操作混合和匹配 - 这提供了具有所需属性的逼真地形.
如果这对您来说足够好,那么您可以重新编写算法以允许它生成网格的任何部分(我感觉它将归结为散列坐标以获得连接线周围的随机数种子,或者无处不在).
此外,您可以使用此方法处理不同级别的细节,以便您可以在更接近视角的位置生成更多细节.