Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2013, 19:27   #1
Антон-Царевич
Пользователь
 
Регистрация: 07.03.2012
Сообщений: 13
Вопрос Шум перлина

что же не так в этом коде алгоритма шума перлина?
Код:
static private float Noise(float x, float y)
{
    var n = (int)x + (int)y * 57;
    n = (n « 13) ^ n;
    return 1 - (float)(((n * (n * n * 15731 + 789221) + 1376312589) &
        0x7FFFFFFF) * 9.313225746154785e-10);
}

static private float Interpolate(float a, float b, float x)
{
    var f = (1 - (float)Math.Cos(x * MathHelper.Pi)) * .5f;
    return a - f * (a + b); // a - a * f + b * f = a - f * (a + b);
}
static private int round(float val) { return (int)(val + .5f); }
static private float SmootedNoise(float x, float y)
{
    var corners = (Noise(round(x - 1), round(y - 1)) + Noise(round(x + 1),
        round(y - 1)) + Noise(round(x - 1),
        round(y + 1)) + Noise(round(x + 1), round(y + 1))) * 0.0625f;
    var sides = (Noise(round(x - 1), round(y)) + Noise(round(x + 1), round(y)) +
        Noise(round(x), round(y - 1)) + Noise(round(x), round(y + 1))) * .125f;
    var center = Noise(round(x), round(y)) * .25f;
    return corners + sides + center;
}

static private float CompleteNoise(float x, float y)
{
    return Math.Abs(Interpolate(
        Interpolate(SmootedNoise(x, y), SmootedNoise(x + 1, y), x - (int)x),
        Interpolate(SmootedNoise(x, y + 1), SmootedNoise(x + 1, y + 1), x - (int)x),
        y - (int)y));
}

static private float PerlinNoisef(float x, float y, float fac)
{
    var res = 0f;
    var pres = 1.25f;
    var ampl = 2.5f;
    var freq = .00001f;
    x += fac;
    y += fac;
    for (var i = 0; i <= 12; i++)
    {
        res += CompleteNoise(x * freq, y * freq) * ampl;
        ampl *= pres;
        freq *= 2;
    }
    return res * 2;
}
в основном коде уже проверенный цикл заливки чёрно-белой текстуры цветом из PerlinNoisef(х,у, 500);

но получается нечто такое
Изображения
Тип файла: jpg hMap.jpg (1.4 Кб, 132 просмотров)

Последний раз редактировалось Антон-Царевич; 26.04.2013 в 19:32.
Антон-Царевич вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с шумом Перлина в С# alik98 Помощь студентам 4 03.03.2013 15:25
Шум Перлина(Pelin Noise) Демик Помощь студентам 6 24.02.2013 16:14
Шум Гаусса Євгеній Бєлік Мультимедиа в Delphi 8 06.01.2013 22:36
Информационный шум usersat Свободное общение 0 21.04.2009 17:46