我有兴趣为我正在制作的2D游戏生成3D高度贴图。我用它来制造像Minecraft或Dwarf Fortress这样的陆地群,并且之前已经完成了这个但是只有固定尺寸:
http://www.freewebs.com/shadowphantom/Results.html
我现在看到我应该研究Perlin或Simplex噪音,但我现在对如何将Perlin或Simplex噪音应用于2D高度阵列感到困惑。
任何对此的帮助都将非常感激,因为我不知道该怎么做。 “八度音乐”这个词并不是乐谱,这让我很害怕。
答案 0 :(得分:1)
我认为您的问题可能不正确。高度图本身就是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
答案 1 :(得分:1)
确切地说,你必须寻找Perlin / Simplex噪音。可以把它想象成一个函数f(x,y,...)(尽可能多的变量),它会输出随机噪声。与纯噪声的区别在于它作用于梯度,因此它看起来更自然,因为它“绘制”渐变而不是具有高局部可变性的普通噪声。单纯形噪声与Perlin的几乎相同,但它在simplexes中划分空间,而不是像Perlin那样在n维网格中运行。这减轻了计算成本,并且还有一些benefits。
这可能看起来很可怕,但实际上很简单。你害怕八度音阶,但它们与音乐中的八度音阶几乎相同:只是更高(或更低)的频率噪声与原始输出混合在一起。谈论乐谱,就像是同时演奏C4和C5。它仍然是C,但它增加了一些味道(波形中的小峰值。)不要害怕并继续研究,这并不难。
关于平铺:
如果您的意思是线性平铺(就像Minecraft那样),您只需使用相同的种子进行噪声算法。一旦你接近新的边界,只需生成新的数据块,它就会很好地平铺(就像你无限地填充噪声一样。)
如果你的意思是圆环平铺(重复瓷砖,例如Pacman),我发现最好的解决方案是生成你的噪声平铺,然后在边界附近进行插值,就好像它是平铺的一样。噪音会变形以匹配两侧,并且它将完全可以拼接。