【发布时间】:2014-06-25 19:37:56
【问题描述】:
我想生成这样的东西:
我使用带有尖锐曲线的 Perlin Noise,我的代码会产生这些悬崖:
.
for (int x = 0; x < sizeX; x++)
{
for (int z = 0; z < sizeZ; z++)
{
int floorY = map.GetMaxYNotWater(x, z);
float n = hillsNoise.Noise(x, z);
int hillY = (int)(curveHills.Evaluate(n) * 80f);
if (hillY > floorY + 5)
{
for (int y = hillY; y > floorY; y--)
{
map.SetBlock(GetBlock(y), new Vector3i(x, y, z));
}
}
}
}
我怎样才能“切割”它们来制作悬挂的东西?
我试着用额外的曲线来做这个:
for (int x = 0; x < sizeX; x++)
{
for (int z = 0; z < sizeZ; z++)
{
int floorY = map.GetMaxYNotWater(x, z);
float n = hillsNoise.Noise(x, z);
int hillY = (int)(curveHills.Evaluate(n) * 80f);
if (hillY > floorY + 5)
{
int c = 0;
int max = hillY - floorY;
max = (int)(max * curveHillsFull.Evaluate(n)) + 1;
for (int y = hillY; y > floorY && c < max; y--, c++)
{
map.SetBlock(GetBlock(y), new Vector3i(x, y, z));
}
}
}
}
但它会产生飞岛。 那么我该怎么做才能实现第一个截图结果呢?
【问题讨论】:
-
如果将第二种算法的结果“减去”到第一种算法的结果会怎样?我猜这会造成一些漏洞
-
@BlackBear 不,它会从中心切开,但我需要从外面切开
标签: c# perlin-noise procedural-generation