Я реализовал функции, которые могут рисовать любую многоугольную форму, однако я не смог создать гладкую форму, которая имитирует закругленные края озера. Я попытался сгенерировать два круга и соединить края, но недостаточно вариаций или гладкости. Есть ли у кого-нибудь указатели или идеи, которые могли бы создать такую форму?
algorithm
procedural-generation
terrain
Manderin87
источник
источник
Ответы:
Alwynd упомянул шум Перлина. Вот как я сгенерировал формы островков для генератора полигональных карт:
(x, y)
в битовой карте шума, вычислить расстояние от центра, нормированы так , что растровое изображение 2х2:(dx, dy) = (2 * x / width - 1, 2 * y / height - 1); d = sqrt(dx*dx + dy*dy)
.(x, y)
является частью острова, еслиnoise[x, y] > 0.3 + 0.4*d*d
. Этот шаг пытается сделать форму округлой, обрезая области, которые находятся далеко от центра.Острова немного более рваные, чем озера, поэтому я не уверен, что эти формы будут вам по вкусу. Я установил демонстрацию вышеупомянутого алгоритма с кнопками внизу для управления двумя магическими числами. Могут быть разные значения магических чисел 0,3 и 0,4, которые создают нужные вам формы.
источник
Вы можете использовать алгоритм Perlin Noise для генерации озер, если вы используете вид сверху вниз (форма многоугольника, похоже на вас), этот парень из Стэнфорда сделал именно это.
http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/
источник
Одним из способов было бы начать с базового многоугольника, может быть, ваш подход с двумя кругами.
Сначала смещайте все точки случайным образом, чтобы они не выглядели как круг, затем для каждого ребра делите их на 2 и смещайте среднюю точку на небольшую случайную величину. Продолжайте делать это, пока у вас не будет необходимых деталей.
Это похоже на то, что делается при генерации вилок молнии.
источник