Створення випадкових басейнів або озер


9

Я реалізував функції, які можуть малювати будь-яку багатокутну форму, однак мені не вдалося створити гладку форму, що імітує округлі краї озера. Я спробував створити два кола і з'єднати краї, але для цього недостатньо варіацій або гладкості. Хтось має вказівники чи ідеї, які могли б створити подібну форму?


Я дивився в криві безьє, здається, що я міг би створити з цього озеро. Хтось має з ними досвід на 2d масиві?
Manderin87

Відповіді:


8

alwynd згадав шум Перліна. Ось як я створив острівні форми для генератора полігонових карт:

  1. Генерувати перлин-шум.
  2. Для кожного місця розташування (x, y)в бітової карті шуму, обчислити відстань від центру, нормовані так , що растрове зображення 2х2: (dx, dy) = (2 * x / width - 1, 2 * y / height - 1); d = sqrt(dx*dx + dy*dy).
  3. Місцезнаходження (x, y)є частиною острова, якщо noise[x, y] > 0.3 + 0.4*d*d. Цей крок намагається зробити форму круглою, вирізавши ділянки, розташовані далеко від центру.

Острови хоч трохи ошатніші, ніж озера, тому я не впевнений, чи сподобаються вам ці форми. Я поставив демонстрацію вищевказаного алгоритму з кнопками внизу, щоб керувати двома магічними числами. Можуть бути різні значення магічних чисел 0,3 і 0,4, які дають потрібні вам форми.


2
Ваша робота - головне натхнення, Аміт. + 10 к, якщо я міг би за ці 5 років дивуватися та насолоди, я вийшов з читання вашого блогу.
Інженер

4

Ви можете використовувати алгоритм Perlin Noise для створення озер для вас, якщо ви використовуєте вид зверху вниз (форма багатокутника, схоже на вас), цей хлопець зі Стенфорда зробив саме це.

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/


1
"Той хлопець зі Стенфорда" також є користувачем цього сайту, FYI.
Інженер

хто ні? =) Я можу почати від шуму (перлин, фрактал), але розмити результати для менш "тужливих" результатів. Чудова стаття, btw - люблю, як він робить річки.
Jari Komppa

0

Один із способів - почати з базового багатокутника, можливо, підхід у два кола.

По-перше, відсуньте всі точки випадковим чином, так що це не дуже схоже на коло, потім для кожного краю розділіть його на 2 і змістіть середню точку на якусь невелику випадкову суму. Продовжуйте робити це, поки не отримаєте необхідні деталі.
Це схоже на те, що робиться при генерації вилок блискавки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.