PDA

Просмотр полной версии : Алгоритмы генерации материков



superregistr
21.07.2010, 12:10
Интересно начать тему об автоматической случайной параметрической генерации материков. У кого какие мысли и предложения?

Peter
21.07.2010, 14:24
сначала пара идей о постановке задачи.

я думаю, нужно как-то моделировать (пусть чисто внешне) движение тектонических плит. чтобы получить нечто напоминающее земные континенты (не по очертаниям, а по принципу расположения).
в цивилизации континенты были представлены
1. либо большими лепёхами овальной формы
2. либо длинными колбасками (скрипт tectonics)
материки выглядели неестественно т.к. их форма была произвольной и форма одного материка не зависела от формы другого.
нам это не подходит.
как должны выглядеть материки?
1. часть материков должны иметь зеркальные края (см. южная америка - африка)
2. береговая линия не должна быть правильной формы (прямая, дуга)

пока всё

General
21.07.2010, 14:53
У меня провы сейчас генерируются так:
Сначала карта "засевается", каждая провинция состоит из одной ячейки.

Затем пробегаем по карте несколько раз и ячейки, граничащие с провинциями, с определённой вероятностью передают в эти провинции.

superregistr
21.07.2010, 15:52
Peter, твою идею довольно трудно реализовать. Особенно, чтобы контур одного материка входил в контур другого. По крайней мере я не представляю, как это можно сделать.

Для начала. Мы имеем узлы. Они пронумерованы и упорядочены так, что закручиваются по сфере по правилу правого винта с севера на юг. (Треугольники кстати так же закручиваются). Есть готовая функция, которая по номеру узла i выдает окружающие его узлы j0, j1, j2, j3, j4, j5. Если узел окружен не шестиугольником, а пятиугольником, то всегда выполняется условие: j4==j5.

Я планировал поступить более банально. Выбирается точка (узел) на сфере. Эта точка есть как бы точка образования. Далее в примерно определенном направлении (а это можно контролировать с помощью углов тета и фи) строится горный хребет или вообще какая-либо возвышенность, от которой материк "расползается" по спадающей, пока не превратится в море.

sweeper
21.07.2010, 16:07
Даже не знаю, стОит ли начинать с механизма плит. Для начала могу предложить попроще.
1. В зависимости от общей характеристики рельефа (горный/равнинный) задать некоторое количество горных хребтов и отдельных пиков.
2. Набросать их на карту (на всю карту)
3. Для узлов, куда горы попали, определить высоту как явно выше среднего
4. Для узлов, куда горы не попали, определить высоту как функцию от расстояния до ближайших гор/пиков. Чем удаленнее от гор, тем ниже. Можно использовать некий сорт линейной функции, к вычисленной высоте прибавить случайное число в некотором диапазоне (ширина диапазона влияет на изрезанность береговой линии).
5. Залить полученный рельеф водой, исходя из сильно водного/слабо водного мира.
6. Дальше построить несколько миров, обсудить здесь, произвести корректировки алгоритма, выступить на gamedev, получить <strike>ш</strike>нобелевскую премию мира и т.д.

General
21.07.2010, 16:44
О, кстати, sweeper, когда стоит о проекте рассказывать на gamedev.ru и что это даст?

sweeper
21.07.2010, 17:52
<div class='quotetop'>Цитата(General * 21.7.2010, 18:44) 342962</div>

О, кстати, sweeper, когда стоит о проекте рассказывать на gamedev.ru и что это даст?
[/b]Ну откуда ж я знаю. Почитай. Посмотри. Есть такой ресурс, там народ тусуется с прислоном к игростроению. Это всё, что мне известно.

Peter
21.07.2010, 18:38
<div class='quotetop'>Цитата(General * 21.7.2010, 16:44) 342962</div>

О, кстати, sweeper, когда стоит о проекте рассказывать на gamedev.ru и что это даст?
[/b]
смотря чего ты хочешь :)

General
21.07.2010, 20:13
1.Вписать свою страницу в историю инди игр
2.Добиться финансовой независимости, чтобы продолжать заниматься любимым делом

Peter
22.07.2010, 08:43
<div class='quotetop'>Цитата(General * 21.7.2010, 20:13) 343072</div>

1.Вписать свою страницу в историю инди игр
2.Добиться финансовой независимости, чтобы продолжать заниматься любимым делом
[/b]
можешь создать такую тему в "проектах": мол вот игра, зацените, подскажите как найти издателя. тебе еще советов дадут как ее улучшить :)
специфика геймдев.ру в том чтоесли есть работающая версия то практически любого уровня игры принимаются благосклонно. если нет - лучше тему не создавать.

sweeper
28.12.2012, 21:41
Это мой примерно тысячный пост, если счетчики не врут. Глупо тратить его на пустяки, поэтому попробую изложить нечто полезное.

Некоторое время назад была тема про сетку на поверхности шара http://www.civfanatics.ru/threads/7000-%D0%98-%D0%B2%D1%81%D0%B5-%D1%82%D0%B0%D0%BA%D0%B8-%D0%BE%D0%BD%D0%B0-%D0%BA%D1%80%D1%83%D0%B3%D0%BB%D0%B0%D1%8F
И где-то примерно здесь http://www.civfanatics.ru/threads/7000-%D0%98-%D0%B2%D1%81%D0%B5-%D1%82%D0%B0%D0%BA%D0%B8-%D0%BE%D0%BD%D0%B0-%D0%BA%D1%80%D1%83%D0%B3%D0%BB%D0%B0%D1%8F/page15 начались картинки
И я сам тоже кое-что выкладывал. Пора сделать очередной шаг -- нормальный генератор карт. Вышеприведенный алгоритм дает кривенькие карты -- иногда ничего, а иногда полная лажа. Типа сверхглубокого озера возле вершины горы. Кроме того, интересует алгоритм рисования рек. Реки у меня тоже не фонтан. Хреновые, прямо скажем, реки -- неуверенные какие-то.
Идея с движением материков мне нравится всё больше, хотя пока слабо представляю программную реализацию разлома Гондваны на несколько материков.
Стоит ли заморачиваться с реализмом на таком уровне?

Может быть, появились свежие идеи?

General
28.12.2012, 22:51
О, какая тема! Кстати, мне пункт 1 выполнить удалось (http://flashgameblogs.ru/blog/developing/1047.html) :)

Не пойму, как в твоём алгоритме получается сверхглубокое озеро около вершины горы? Это же фрактал плазма по сути (http://ru.wikipedia.org/wiki/%D0%9F%D0%BB%D0%B0%D0%B7%D0%BC%D0%B0_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0 %B0))?

Peter
29.12.2012, 06:28
можно посмотреть код генерации в скриптах цив5