我正在与 Perlin Noise 合作开发高度图生成算法,我想让它环绕边缘,以便可以将其视为连续的..有没有简单的方法或技巧可以做到这一点?我想我需要类似球形噪声的东西,以便它在水平和垂直方向上环绕。我也很高兴只有 1 个缠绕轴,但有两个会更好。
现在我使用经典算法,您可以在其中设置要添加多少个八度音阶,以及用于更改每个连续八度音阶之间波的幅度和频率的乘数。
提前致谢!
Perlin 噪声作为波形的总和获得。波形是通过插值随机值获得的,较高倍频程的波形具有较小的缩放因子,而插值的随机值彼此更接近。要进行环绕,您只需要以通常的环形方式在 y 轴和 x 轴周围正确插值,即,如果您的 X 轴从 x_min 跨越到 x_max,并且最左边的随机点(正在插值)是在 x0 和最右边的 x1 (x_min
这里是使用线性插值的八度之一的伪代码。假设一个 256 x 256 矩阵,其中 Perlin 噪声网格大小是两个像素的幂……只是为了使其可读。想象一下例如尺寸==16:
wrappable_perlin_octave(grid, size):
for (x=0;x<256;x+=size):
for (y=0;y<256;y+=size):
grid[x][y] = random()
for (x=0;x<256;x+=size):
for (y=0;y<256;y+=size):
if (x % size != 0 || y % size != 0): # interpolate
ax = x - x % size
bx = (ax + size) % 256 # wrap-around
ay = y - y % size
by = (ay + size) % 256 # wrap-around
h = (x % size) / size # horizontal balance, floating-point calculation
v = (y % size) / size # vertical balance, floating-point calculation
grid[x][y] = grid[ax][ay] * (1-h) * (1-v) +
grid[bx][ay] * h * (1-v) +
grid[ax][by] * (1-h) * v +
grid[bx][by] * h * v
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)