Я прочитал несколько руководств по шумам 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 реализация хорошая и «простая».
Симплексный шум в 2d медленнее;) – crush3dice