需要 perline noise ursina 的帮助来打造一片平原
Need help in perline noise ursina to make an a plain land
我知道使用 perlin-noise 来制作带有立方体的图案,但我想要的是随机地形
平原,比如这个叫 muck 的游戏(已经被 unity 开发)
我试过:
noise = PerlinNoise(octaves=3, seed=2007)
amp = 3
freq = 24
width = 30
for po in range(width*width):
s = randint(200, 255)
q = Entity(model="cube", collider="box", texture="white_cube",
color=color.rgb(s, s, s))
q.x = floor(po/width)
q.z = floor(po % width)
q.y = floor(noise([q.x/freq, q.z/freq]) * amp)
所以这将提供 - 几乎 - 完美的随机地形,但我希望我的地形看起来比立方体更真实
提前致谢 ;)
不出所料,您的景观看起来是立方体的,因为您是从立方体构建它的。所以为了让它更逼真,为它使用更灵活的Mesh。您必须分别分配表面的每个点并通过三角形将其连接到周围:
level_parent = Entity(model=Mesh(vertices=[], uvs=[]), color=color.white, texture='white_cube')
for x in range(1, width):
for z in range(1, width):
# add two triangles for each new point
y00 = noise([x/freq, z/freq]) * amp
y10 = noise([(x-1)/freq, z/freq]) * amp
y11 = noise([(x-1)/freq, (z-1)/freq]) * amp
y01 = noise([x/freq, (z-1)/freq]) * amp
level_parent.model.vertices += (
# first triangle
(x, y00, z),
(x-1, y10, z),
(x-1, y11, z-1),
# second triangle
(x, y00, z),
(x-1, y11, z-1),
(x, y01, z-1)
)
level_parent.model.generate()
level_parent.model.project_uvs() # for texture
level_parent.model.generate_normals() # for lighting
level_parent.collider = 'mesh' # for collision
但是,生成速度会很慢,主要是由于使用了 Perlin 噪声实现(我假设 this one). A faster option can be found in 。
我知道使用 perlin-noise 来制作带有立方体的图案,但我想要的是随机地形
平原,比如这个叫 muck 的游戏(已经被 unity 开发)
我试过:
noise = PerlinNoise(octaves=3, seed=2007)
amp = 3
freq = 24
width = 30
for po in range(width*width):
s = randint(200, 255)
q = Entity(model="cube", collider="box", texture="white_cube",
color=color.rgb(s, s, s))
q.x = floor(po/width)
q.z = floor(po % width)
q.y = floor(noise([q.x/freq, q.z/freq]) * amp)
所以这将提供 - 几乎 - 完美的随机地形,但我希望我的地形看起来比立方体更真实 提前致谢 ;)
不出所料,您的景观看起来是立方体的,因为您是从立方体构建它的。所以为了让它更逼真,为它使用更灵活的Mesh。您必须分别分配表面的每个点并通过三角形将其连接到周围:
level_parent = Entity(model=Mesh(vertices=[], uvs=[]), color=color.white, texture='white_cube')
for x in range(1, width):
for z in range(1, width):
# add two triangles for each new point
y00 = noise([x/freq, z/freq]) * amp
y10 = noise([(x-1)/freq, z/freq]) * amp
y11 = noise([(x-1)/freq, (z-1)/freq]) * amp
y01 = noise([x/freq, (z-1)/freq]) * amp
level_parent.model.vertices += (
# first triangle
(x, y00, z),
(x-1, y10, z),
(x-1, y11, z-1),
# second triangle
(x, y00, z),
(x-1, y11, z-1),
(x, y01, z-1)
)
level_parent.model.generate()
level_parent.model.project_uvs() # for texture
level_parent.model.generate_normals() # for lighting
level_parent.collider = 'mesh' # for collision
但是,生成速度会很慢,主要是由于使用了 Perlin 噪声实现(我假设 this one). A faster option can be found in