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?
algorithm
procedural-generation
terrain
Manderin87
źródło
źródło
Odpowiedzi:
Alwynd wspomniał o hałasie Perlina. Oto jak wygenerowałem kształty wysp dla generatora map wielokątów:
(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)
.(x, y)
jest częścią wyspy, jeślinoise[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.
źródło
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/
źródło
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.
źródło