作为个人项目,我正在尝试制作一个地形生成器,以创建看起来像《城堡物语》平滑地形的地形。
如果您以前没有看过,请在这里:
如您所见,它是块和“平滑”块的组合。
我试图模仿这种外观的方法是为每个表面块提供一个迷你高度图。通常这是可行的,但存在一些问题,产生如下所示的地形:
问题是每个块都是1x1x1,但是有时特定位置的高度为负或>1。在这种情况下,我将其裁剪并将高度设置为0或1。
为了更好地说明我的意思,下面是一个图:
为了生成高度,我基本上做了:
genColumn(int x, int z)
{
int highestBlockY = (int)noise2d(x, z);
bool is_surface = true;
for(int y = max_height - 1; y >= 0; y--)
{
Block b;
if(is_surface)
{
b = Block.Grass;
b.HasHeightMap = true;
// generate heightmap
for(int ix = 0; ix < 5; ix++)
{
for(int iz = 0; iz < 5; iz++)
{
float heightHere = noise2d(x + ix / 4, z + iz / 4) - y;
// clip heights
if(heightHere > 1)
heightHere = 1;
if(heightHere < 0)
heightHere = 0;
b.HeightMap[ix][iz] = heightHere;
}
}
is_surface = false;
}
else
{
b = Block.Dirt;
}
setBlock(x, y, z, b);
}
}
也许我通过使用“真实的”珀林噪声值来错误地解决了这一问题?
任何帮助将不胜感激!