2d Процедурное поколение вселенной

16

Я хочу создать плоскую вселенную, где поначалу вся вселенная пуста.

Это было бы представлено фоновым изображением скручивающейся параллакса.

То, что я хочу сделать, это представить планеты как объекты в форме диска во вселенной. Они могут быть разных размеров.

Внутренняя часть дисков будет состоять из суши, затем снаружи будет масса воды, а затем воздух.

что было бы наилучшим способом создания таких плиток процедурно, например, воздух состоял бы из различных газов и земли из различных минералов и ресурсов.

Моя первая мысль - создать текстурные изображения, а затем вычеркнуть круги из этих текстур, но проблема в том, что эти текстуры придется обернуть по горизонтали и по вертикали. Есть ли полностью процедурный способ сделать это?

Жозеф Ле Брех
источник
На такие вопросы лучше ответить с каким-то визуальным описанием того, что вы ищете. Хороший ответ ниже может быть либо слишком техническим, либо недостаточно техническим.
Ричард Фабиан

Ответы:

14

Процедурные текстуры, особенно основанные на шуме, могут быть сделаны на плитку. Посмотрите эту ветку в GDNet для некоторого обсуждения, а также эту запись в журнале. Есть также эта ссылка , которая звучит интересно, хотя я не могу говорить за ее правдивость.

Что касается процедурной генерации мира, то есть эта статья, написанная парнем, разрабатывающим Infinity. Его система 3D, но вы, вероятно, могли бы легко адаптировать методы.

Также есть целая вики по процессу генерации контента .


источник
1
Пфф. Мне нужно научиться печатать быстрее. Это в основном то, что у меня в окне редактора ниже ... +1 вам, сэр.
bummzack
ура, я попробую.
Джозеф Ле Брех
2

Для меня это звучит так, будто вы хотите прямоугольные текстуры с воздухом сверху и грязью снизу. Вы можете отобразить прямоугольные текстуры на круги, задав координату текстуры U, представляющую угол вокруг круга, а координату текстуры V, представляющую расстояние от центра круга. Для больших планет U может обернуться вокруг планеты несколько раз.

Чтобы преобразовать обычные 2D-координаты XY в вышеприведенные UV-координаты, вы можете выполнить математику следующим образом:

y -= planet_center.y;
x -= planet_center.x;
u = atan2( y, x );
v = sqrt( y*y + x*x );

Следует позаботиться о том, чтобы не рассчитать это слишком близко к центру планет ...

bmcnett
источник
Я думаю о вертикальном поперечном сечении вселенной, как это: i.imgur.com/gpCTc.jpg земля, море, воздух, пустота. и т.д ..
Джозеф Ле Брех
Это разумный способ разделения пространства на типы, но будет непросто сделать его похожим на сферические планеты.
bmcnett
Theres не требуется, чтобы он выглядел слишком похоже на планету. достаточно случайной земли, воды, воздуха в правильной пропорции и все в шестигранной сетке вместе с другими планетами в этой сетке.
Джозеф Ле Брех
Ах, тогда вы захотите сгенерировать много гексагональных текстурных плиток с тем условием, что грань между землей / воздухом и т. Д. Будет отображаться в предсказуемом месте между соседними плитками?
bmcnett
да, в сферической форме. таким образом, размер каждого слоя (земля, вода ..) выбирается случайным образом, а затем в этой земной массе будут размещаться случайные плитки земли для планеты, и одинаковые для каждого слоя.
Джозеф Ле Брех