我理解使用 perlin-noise 來制作一個帶有立方體的圖案,但我想要的是一個隨機地形平原,比如這個叫做 muck 的游戲(已經被統一開發了)
我試過這樣做:
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)
所以這將提供一個幾乎完美的隨機地形,但我希望我的地形看起來比立方體更逼真,謝謝 ;)
uj5u.com熱心網友回復:
不出所料,您的景觀看起來是立方體的,因為您是用立方體構建的。因此,為了使其更逼真,請為其使用更靈活的網格。您必須分別分配表面的每個點并通過三角形將其連接到其周圍:
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 噪聲實作(我假設是這個)。可以在此答案中找到更快的選項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/395719.html
