2014-01-24 5 views
2

Я прочитал несколько руководств по шумам perlin (например, this) для моего создания местности, и я хотел убедиться, что я понял это и могу его правильно реализовать.C# perlin Noise

Я начинаю с 1 Размеры:

амплитуды = инерционности^я // настойчивость может иметь любое значение, но в основном это 1 или ниже. Он изменяет амплитуду графиков с более высокой частотой, так как:

frequency = 2^i // 2 эффекта, каждый график отражает одну октаву, которая не на 100% необходима, но пример случается, делают это так

'i' - октава, на которую мы смотрим.

Вот моя попытка:

private float[] generateGraph() 
{ 
    float[] graph = new float[output.Width]; 
    for (int i = 0; i < output.Width; i += 1/frequency) 
    { 
     graph[i] = random.Next((int)(1000000000000*persistence))/1000000000000f; 
    } 
    return graph; 
} 

Я представил массив в виде графика, где индекс является X и значение Y. I поиска значения для каждого кратного texture.Width/частоты до конец массива.

У меня есть некоторые случайные значения, которые я использую сейчас, с которыми мне нужно связаться как с Linear Interpolation/Cosine Interpolation, так и с Cubic Interpolation. Какой я должен использовать? Какой из них наиболее эффективен, когда я хочу использовать шум для генерации местности в 2D?

После этого я хотел бы поместить графики в 2D-массив, а затем проверить каждое значение, если оно больше 0,5, оно должно получить некоторый материал или текстуру.

В этой ситуации, как я должен это делать? Неужели я полностью ошибаюсь?

edit1: Прежде чем я поместил график в 2D-массив, я хотел бы сгенерировать, возможно, еще 5 графиков с более высоким «i» и смешать их (что не должно быть слишком сложным).

редактирование2: this реализация хорошая и «простая».

ответ

0

Определить «слишком высокую производительность» любая интерполяция должна быть хорошей для 2D-данных. Если вас действительно беспокоит производительность, вы можете попробовать реализовать Simplex Noise, но это намного сложнее понять и реализовать, и это действительно становится лучше в 3D и выше. В 2D они как-то сопоставимы.

Кроме того, шум perlin обычно реализуется как функция параметров x, где x - количество измерений, а функция имеет внутренний массив случайных значений, к которому обращаются на основе целочисленных значений параметров. Вы должны попробовать изучить original source code.

+0

Симплексный шум в 2d медленнее;) – crush3dice

Смежные вопросы