He implementado funciones que pueden dibujar cualquier forma poligonal, sin embargo, no he podido generar una forma suave que imite los bordes redondeados de un lago. Intenté generar dos círculos y unir los bordes, pero no hay suficiente variación o suavidad. ¿Alguien tiene punteros o ideas que puedan generar una forma como esta?
algorithm
procedural-generation
terrain
Manderin87
fuente
fuente
Respuestas:
Alwynd mencionó el ruido de Perlin. Así es como generé las formas de la isla para el generador de mapas poligonales:
(x, y)
en el mapa de bits de ruido, calcular la distancia desde el centro, normalizado de modo que el mapa de bits es 2x2:(dx, dy) = (2 * x / width - 1, 2 * y / height - 1); d = sqrt(dx*dx + dy*dy)
.(x, y)
es parte de la isla sinoise[x, y] > 0.3 + 0.4*d*d
. Este paso intenta redondear la forma cortando áreas que están lejos del centro.Sin embargo, las islas son un poco más desiguales que los lagos, por lo que no estoy seguro de si estas formas serán de su agrado. He puesto una demostración del algoritmo anterior , con botones en la parte inferior para controlar los dos números mágicos. Puede haber diferentes valores de los números mágicos 0.3 y 0.4 que producen formas que le gustan.
fuente
Podrías usar un algoritmo de ruido Perlin para generar los lagos por ti, si estás usando una vista de arriba hacia abajo (forma de polígono, suena como si fueras), este chico de Stanford hizo exactamente eso.
http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/
fuente
Una forma sería comenzar con un polígono básico, tal vez su enfoque de 2 círculos.
Primero, compensa todos los puntos al azar, por lo que no se parece demasiado a un círculo, luego, para cada borde, divídelo en 2 y compensa el punto medio por una pequeña cantidad aleatoria. Siga haciendo esto hasta que tenga los detalles requeridos.
Esto es similar a lo que se hace al generar horquillas de rayos.
fuente