Алгоритм генерации 3d Hill? - PullRequest
0 голосов
/ 26 августа 2011

Предположим, у вас есть 3-я коробка кубов, у каждого куба есть 3 индекса: (x,y,z) и 1 дополнительный атрибут, чтобы указать, представляет ли он землю или воздух.

Допустим, у нас есть 3d-массив для представления этого блока кубов, причем каждый куб является элементом в 3d-массиве.

Следующий массив, например, будет представлять собой участок земли в форме чаши:

y=0:        
0 0 0 0 0     
0 0 0 0 0
1 1 1 1 1
1 1 1 1 1

y=1:
0 0 0 0 0
0 0 0 0 0
1 0 0 0 1
1 1 1 1 1

y=2:
0 0 0 0 0
0 0 0 0 0
1 0 0 0 1
1 1 1 1 1

y=3:
0 0 0 0 0  
0 0 0 0 0
1 1 1 1 1
1 1 1 1 1

Что такое алгоритм такой, что при наличии поля выбора он будет генерировать холмы с частотой fи со средней высотой h, со средним отклонением v в высоту?

Можно предположить, что самым низким уровнем склеивания является «базовый уровень» или «уровень моря».

function makeTrees(double frequency, int height, double variation)
{
    //return 3d array.
}

Я пишу Minecraft MCEdit Плагин фильтра: P

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Самый простой способ - разложить проблему на три части:

  1. Напишите процедуру для генерации кубов для одного холма высотой h. Начните с создания этого простого конуса (играйте с углами вершины, пока не найдете что-то приятное)

  2. Создать набор из n высот между h-v и h + v, используя генератор случайных чисел по вашему выбору

  3. Разместите n гор в случайном порядке на вашем кубе. Не имеет значения, пересекаются ли они - действительно, это приведет к более привлекательному диапазону.

Однако я бы также предложил отказаться от этого подхода и просто сгенерировать фрактальную местность в пределах вашего ограничивающего куба, а затем дискретизировать ее. Вы можете играть с параметрами для вашего фрактального генератора, чтобы ограничить высоту и дисперсию.

1 голос
/ 26 августа 2011

Предполагая, что вы хотите, чтобы синусоидальные холмы с частотой f (точнее, волновое число f, так как "частота" обычно используется для временных величин) как функция радиуса r = sqrt(x^2+y^2) от центр:

Определить пороговую функцию следующим образом:

enter image description here

Любой элемент (x,y,z) с z < z_m будет сушей, а остальные - воздухом.

...