2012-04-15 2 views
2

Я программирую механизм рельефа, который использует куски Minecraft-esque. Куски генерируются отдельно, используя Diamond-square algorithm.Выстраивание фрагментов рельефа (Алгоритм Алмазного квадрата)

Проблема в том, что эти куски не выстраиваются в линию, они полностью разделены. Я пробовал многое, чтобы заставить их сделать это, но пока ничего не получилось.

Редактировать: Также мир, который я пытаюсь создать, не бесконечен; он генерирует 33x33 массив кусков, каждый с глобальным значением высоты, назначенным другим генератором Алмазного квадрата.

Есть ли (простой, предпочтительно) способ модифицировать двигатель с алмазным квадратом, чтобы выровнять куски?

ответ

0

Итак, вы генерируете каждый квадрат верхнего уровня алгоритма с алмазным квадратом как отдельный кусок?

Вы должны поделиться четырьмя угловыми точками этого куска с окружающими кусками.

Существует очень простой способ сделать это. Вам просто нужна функция шума с двумя параметрами (если вы создаете ландшафт в 2D) - функция, которая всегда возвращает одно и то же псевдослучайное число для одного и того же семестра (которое остается постоянным для всей карты) и двух параметров. Поэтому, если вы запросите функцию для значения по координате [-100, 500], вы всегда получите тот же номер (что гарантирует, что окружающие куски выстраиваются в линию).

Пример такой функции заключается в следующем:

function Noise1(integer x, integer y) 
    n = x + y * 57 
    n = (n<<13)^n; 
    return (1.0 - ((n * (n * n * 15731 + 789221) + 1376312589) & 7fffffff)/1073741824.0);  
end function 

Source.

EDIT:

Моих плохо - вы не должны полагаться на параметризированной функции шума только для четырех угловых точек, вы должны использовать его для всех случайных чисел в алгоритме алмазного квадрата.

Если это не сработает, вы делаете что-то не так с вашей стороны.

+0

Это не совсем разработка - Я обновил этот вопрос с небольшим количеством информации я забыл. –

+0

@ BK-TN Извините, я добавил немного разъяснений к моему ответу. –

+0

Я предполагаю, что ответ на самом деле использует шум perlin для кусков - я мог бы попробовать это, хотя я уже нашел более простой способ :) –

0

Смотрите этот ответ: Making the diamond square fractal algorithm infinite

Ваш лучший выбор должен был бы идти либо полностью шум, или использовать мой изящный бесконечный алмаз квадрат алгоритм. И просто усечь его, на твоем крае. Если вы хотите назвать какой-то регион куском, пусть будет так. Легко найти любую точку в таком-то бесконечном поле.

Или мое объяснение и реализован пример здесь: http://godsnotwheregodsnot.blogspot.com/2013/11/field-diamond-squared-fractal-terrain.html

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