微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

故障查找组块加载噪声算法

如何解决故障查找组块加载噪声算法

我正在使用基本的2D地形生成器,目前正在使用perlin-numpy生成1024x1024地形“样本”。 我感兴趣的是可以选择在当前地形上方生成一个“块”(例如minecraft),该块不同但可以在当前地形上方平滑地放置。

TL; DR: 我正在使用的噪声函数需要generate_fractal_noise_2d((1024,1024),octaves=6)
我希望能够做 generate_fractal_noise_2d((1024,location=(<x coord of chunk (pixels)>,<y coord of chunk (pixels)>),octaves=6)

解决方法

通常,使用噪声非常容易,因为噪声是点评估功能。如果该库提供了“偏移”参数,则该库将起作用,但似乎没有。另外,您是否有理由使用“ Perlin”噪声库而不是(Open)Simplex? Perlin是噪声的较旧功能,会在视觉上产生明显的网格偏差。 (开放式)Simplex在这方面可以做得更好。您可以在this image中看到,顶部的Perlin有很多45度和90度的零件。地形特征不会沿着更有趣的各种方向分布。

这就是我要做的:

String: 32 Syndicate street
street-- Syndicate street
apartmentnumber-- 32
String: Street 45 No 100
street-- Street 45
apartmentnumber-- No 100
String: 15,Tom and Jerry Street
street-- Tom and Jerry Street
apartmentnumber-- 15
  • 手动填充阵列。这是一个简单的循环,但是如果您对numpy足够熟悉,则可以使用其语法来编写它。
class OpenSimplexFractal(object):

    def __init__(self,seed=0,octaves=6):
        self._instances = []
        for i in range(octaves):
            self._instances[i] = OpenSimplex(seed + i)
    
    def fractalNoise2(x,y,persistence=0.5,lacunarity=2,frequency=1,amplitude=1):
        value = 0
        for i in range(len(self._instances)):
            value += self._instances[i].noise2d(x * frequency,y * frequency) * amplitude
            amplitude *= persistence
            frequency *= lacunarity
        return value

在原点生成块时,您将执行 def arrayFractalNoise2(shape,offset,amplitude=1): noise = np.zeros(shape) for y in range(shape[0]): for x in range(shape[1]): noise[y+offset[1],x+offset[0]] = fractalNoise2(x,persistence,lacunarity,frequency,amplitude) return noise 。但是,当在X中生成下一个块时,您将执行arrayFractalNoise2((1024,1024),(0,0),...)等操作。

我可能在代码中犯了错误,但我希望它会有所帮助。

(我特此在CC0下发布这些代码段)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。