我有兴趣为我正在制作的2D游戏生成3D高度贴图。我正在使用它来创建像Minecraft或Dwarf Fortress这样的陆地群,并且之前已经完成了这个但是只有固定大小:
http://www.freewebs.com/shadowphantom/Results.html
我现在看到我应该研究Perlin或Simplex噪声,但我现在对如何将Perlin或Simplex噪声应用于2D高度阵列感到困惑。
任何对此的帮助将非常感激,因为我不知道该怎么做。 “八度音”一词不是乐谱,这让我很害怕。
我认为您的问题可能不正确。高度图本身就是2D,您可以使用它来生成3D地形(网格)。
http://en.wikipedia.org/wiki/Heightmap
如果是这种情况......那么您可以使用Perlin噪声函数创建2D图像并将其用于高度图。如果您不确定创建的内容,可以使用GIMP或Photoshop或类似工具在2D Canvas上创建Perlin噪声。
Minecraft利用Perlin噪声功能创建3D立方体噪声。因此,如果高度图是2D Perlin噪音,那么Minecraft就是3D Perlin噪音。您还可以生成1D Perlin噪音。
Perlin噪声函数的优点在于,您可以通过数学控制纹理的“分辨率”和“偏移”,从而创建无缝环境。我相信Minecraft利用Perlin噪音作为基础,然后转向一些细胞自动机进行最后的修饰。
我不熟悉单面噪音。
编辑:这是一个测试一些数学函数(处理中)http://processing.org/learning/basics/noise2d.html的链接
确切地说,你必须寻找Perlin / Simplex噪音。将其视为函数f(x,y,...)(尽可能多的变量)将输出随机噪声。与纯噪声的区别在于它作用于梯度,因此它看起来更自然,因为它“绘制”渐变而不是具有高局部可变性的普通噪声。单纯形噪声几乎与Perlin相同,但它在simplexes中划分空间,而不是像Perlin那样在n维网格中运行。这减轻了计算成本,并且有更多的benefits。
这可能看起来很可怕,但实际上很简单。你害怕八度音阶,但它们与音乐中的八度音阶几乎相同:只是更高(或更低)的频率噪声与原始输出混合在一起。谈论乐谱,就像是同时演奏C4和C5。它仍然是C但它增加了一些味道(波形中的尖峰很少。)不要害怕并继续研究,这并不难。
关于平铺:
如果你的意思是线性平铺(就像Minecraft那样),你只需要使用相同的种子来进行噪声算法。一旦你接近新的边界,只需生成新的数据块,它就会很好地平铺(就像你无限地填充噪声一样)。
如果你的意思是圆环平铺(重复瓷砖,比如说Pacman),我发现最好的解决方案是生成你的噪声瓦片然后在边界附近进行插值,就好像它是平铺的一样。噪音会变形以匹配侧面,并且它将完全可以拼接。