使用权重函数以程序方式生成地形,但没有给我预期的结果

时间:2019-03-03 16:35:40

标签: c# unity3d math terrain procedural-generation

我正在尝试利用标题为“使用高级权重函数的基于Dijkstra的地形生成”的论文中的权重函数。我已经采用了它们提供的权重函数,并尝试在C#中实现它。我得到的输出似乎正在工作,但并不完全。我对数学的了解不足以解决问题。

这里是纸张的重量函数。本文还定义了一种选择节点并计算权重的方法,但是我不认为如果我希望单独使用它,则不需要这样做: Weight function

我当前的C#代码。数据正在输出到Unity Terrain对象。

for (int y = 0; y < Resolution; y++)
    {
        for (int x = 0; x < Resolution; x++)
        {
            //I tried to inteprite the expression here, this is probably not correct.
            float dot = Vector3.Dot(WindDirection.normalized, new Vector3(x, y));
            float ri = ReverseInterpolate(dot);
            float inter = Interpolate(ri);
            terrainheights[y, x] = Weight * inter;
        }
    }

我的插值方法:

private float Interpolate(float value)
{
    float x1 = 0;
    float x2 = 1;
    float y1 = 0;
    float y2 = Weight;
    float y = y1 + (value - x1) / (x2 - x1) * (y2 - y1);
    return y;
}

private float ReverseInterpolate(float x)
{
    float x1 = -1;
    float x2 = 1;
    float y1 = 0;
    float y2 = 1;
    float y = y1 + (x - x1)/ (x2 - x1) * (y2 - y1);
    return y;
}

最后是我得到的结果以及“重量”和“风向”的值。如您所见,该效果略有发挥,但达不到我希望的程度: enter image description here

任何帮助将不胜感激!

0 个答案:

没有答案