Generowanie losowych basenów lub jezior

9

Zaimplementowałem funkcje, które potrafią narysować dowolny kształt wielokąta, jednak nie byłem w stanie wygenerować gładkiego kształtu, który naśladuje zaokrąglone krawędzie jeziora. Próbowałem wygenerować dwa koła i połączyć krawędzie, ale nie ma wystarczającej zmienności lub płynności. Czy ktoś ma jakieś wskazówki lub pomysły, które mogłyby wygenerować taki kształt?

Manderin87
źródło
Patrzyłem na krzywe Beziera, wygląda na to, że mógłbym z tego wygenerować jezioro. Czy ktoś ma z nimi jakieś doświadczenie na tablicy 2d?
Manderin87

Odpowiedzi:

8

Alwynd wspomniał o hałasie Perlina. Oto jak wygenerowałem kształty wysp dla generatora map wielokątów:

  1. Generuj hałas perlin.
  2. Dla każdej lokalizacji (x, y)w bitmapy hałasu, obliczyć odległość od centrum znormalizowane tak, że mapa bitowa jest 2x2: (dx, dy) = (2 * x / width - 1, 2 * y / height - 1); d = sqrt(dx*dx + dy*dy).
  3. Lokalizacja (x, y)jest częścią wyspy, jeśli noise[x, y] > 0.3 + 0.4*d*d. W tym kroku próbuje się zaokrąglić kształt, odcinając obszary znajdujące się daleko od środka.

Wyspy są jednak nieco bardziej poszarpane niż jeziora, więc nie jestem pewien, czy te kształty przypadną ci do gustu. Przygotowałem demo powyższego algorytmu , z przyciskami u dołu do kontrolowania dwóch magicznych liczb. Mogą istnieć różne wartości liczb magicznych 0,3 i 0,4, które tworzą kształty, które lubisz.

amitp
źródło
2
Twoja praca jest główną inspiracją, Amit. + 10k, gdybym mógł, przez około 5 lat cudów i radości, które wyciągnąłem z czytania twojego bloga.
Inżynier
4

Możesz użyć algorytmu Perlin Noise do wygenerowania jezior dla ciebie, jeśli używasz widoku z góry na dół (kształt wielokąta, brzmi jak jesteś), ten facet ze Stanford właśnie to zrobił.

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

alwynd
źródło
1
„Ten facet ze Stanford” jest także użytkownikiem tej witryny, FYI.
Inżynier
kto nie jest =) Mógłbym zacząć od jakiegoś hałasu (perlin, fraktal), ale rozmyć wyniki, aby uzyskać mniej „postrzępione” wyniki. Świetny artykuł, btw - uwielbiam, jak robi rzeki.
Jari Komppa
0

Jednym ze sposobów może być rozpoczęcie od podstawowego wielokąta, być może podejście do dwóch kręgów.

Najpierw losowo wyrównaj wszystkie punkty, aby nie wyglądało zbytnio jak koło, a następnie dla każdej krawędzi podziel go na 2 i przesunąć środkowy punkt o pewną niewielką liczbę losową. Rób to, dopóki nie uzyskasz wymaganych szczegółów.
Jest to podobne do tego, co zrobiono podczas generowania widelców błyskawicy.

George Duckett
źródło