Генерация рельефа "на лету" На основе существующего рельефа

StackOverflow https://stackoverflow.com/questions/6316923

Вопрос

Этот вопрос очень похож на тот, что был задан здесь.

Моя проблема в том, что у меня есть карта, что-то вроде этого:

Main Map

Эта карта составлена с использованием 2D-шума Перлина, а затем прогоняется по созданной карте высот, присваивая типы и значения цвета каждому элементу местности на основе высоты или наклона соответствующего элемента, так что все довольно стандартно.Массив карт двумерный, и точные размеры соответствуют размеру экрана (пиксель на пиксель), поэтому на моей установке генерация при размере 1200 на 800 занимает около 2 секунд.

Теперь увеличьте масштаб выделенного прямоугольника:

http://i.stack.imgur.com/hrZnM.png

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

http://i.stack.imgur.com/bbLia.png

Это увеличенный вид нового смещенного локального рельефа, созданного на основе выбранного элемента старого рельефа, который выделен желтым пространством сетки (слева от центра) на предыдущем изображении.Однако эта система потребовала бы значительных изменений, поскольку, например, если вы переместите одну единицу влево и вверх от желтой сетки на пляжную плитку, рельеф местности полностью изменится:

http://i.stack.imgur.com/6shKz.png

Таким образом, чтобы это работало должным образом, вам нужно было бы выполнить чрезмерное количество, я думаю, слово было бы интерполяцией, чтобы создать плавный переход, поскольку игрок переместил около 40 ячеек сетки в локальном мире, необходимых для перехода к следующей плитке в мире over.Это кажется сложным и очень неэлегантным.

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

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

Это было полезно?

Решение

Перепишите ваш шум Перлина так, чтобы он зависел от положения.Затем вы можете увеличить октавы (и, следовательно, уровень детализации) и выполнить повторную выборку области с более высоким разрешением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top