我正在使用Perlin噪声生成高度图算法,我希望使其环绕边缘,以便它可以被视为连续的...是否有一种简单的方法或技巧可以做到这一点?我想我需要像球形噪声一样的东西,使得水平和垂直方向上都能环绕。我也可以只使用一个环绕轴,但两个会更好。
现在,我正在使用经典算法,您可以设置要添加的八度音程数量以及每个连续八度波之间用于更改振幅和频率的乘数。
提前致谢!
我正在使用Perlin噪声生成高度图算法,我希望使其环绕边缘,以便它可以被视为连续的...是否有一种简单的方法或技巧可以做到这一点?我想我需要像球形噪声一样的东西,使得水平和垂直方向上都能环绕。我也可以只使用一个环绕轴,但两个会更好。
现在,我正在使用经典算法,您可以设置要添加的八度音程数量以及每个连续八度波之间用于更改振幅和频率的乘数。
提前致谢!
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
size
的步长进行,那么取模运算在每一步都必须为零。因此,主要的计算从来没有被调用过! - Alex