【发布时间】:2026-01-03 11:00:01
【问题描述】:
我正在用体素地形编写类似 mincraft 的游戏。
对于山脉,我指定了位置、高度和大小。如果当前 (x, y, z) 坐标处的块是山的一部分,则有一个函数返回 True。如果一个块远离山的中心,只有当 z 坐标低于与山的距离的最大高度时才返回 True,即,块离山越远,最大高度越低。所以在山的中心,最大高度很高,即使z很高也会返回True(我使用的是z-up系统)。但是,离山越远,最大高度会越低。
但是,我当前的函数(如下)以线性方式返回它们,而真正的山脉没有直边:
def isMountain(self, x, y, z, mountainPos, mountainSize, mountainHeight):
if math.hypot(mountainPos[0] - x, mountainPos[1] - y) < mountainSize:
if z < (mountainHeight - math.hypot(mountainPos[0] - x, mountainPos[1] - y)):
return True
else:
return False
第 3 行检查 z 是否小于该位置的最大高度,如果是,则返回 True,否则返回 False。
这些是距离的最大高度:
距离:最大高度
0 - 10
1 - 9
2 - 8
...
9 - 1
10 - 0
我如何重新编写此函数以使其返回更多类似山的值:不是线性的,而是立方或平滑衰减(如搅拌机比例编辑模式),因此它会给出更像这样的值:
0 - 10
1 - 9
2 - 9
3 - 8
4 - 7
5 - 5
6 - 3
7 - 1
【问题讨论】:
-
如果在半径且高于固定高度的范围内,为什么不考虑山内的方块?事实上,你如何确定现实生活中一座山的边界?另一种选择可以考虑提到的半径和某种坡度检查
标签: python terrain procedural-generation voxel