Использование функции веса для процедурной генерации ландшафта, но это не дает мне ожидаемого результата - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь использовать весовую функцию из статьи под названием «Генерация рельефа на основе Дейкстры с использованием расширенных весовых функций».Я взял весовую функцию, которую они предоставляют, и я попытался реализовать ее в 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

Любая помощь будет принята с благодарностью!

...