Я хотел бы создать игру с бесконечным (на самом деле очень большим) миром, в котором игрок может передвигаться. Вопрос о том, удастся ли мне когда-нибудь реализовать игру, зависит от меня, но я нахожу эту идею интересной и хотел бы узнать, как это сделать.
Суть в том, чтобы иметь мир, в котором все данные генерируются случайным образом по запросу, но детерминистическим способом.
В настоящее время я сосредотачиваюсь на большой 2D-карте, на которой должна быть возможность отображать любую часть без знания окружающих частей.
Я реализовал прототип, написав функцию, которая выдает случайное, но детерминированное целое число, учитывая x и y пикселя на карте (см. мой недавний вопрос об этой функции ). Используя эту функцию, я заполняю карту «случайными» значениями, а затем сглаживаю карту, используя простой фильтр на основе окружающих пикселей. Это делает карту зависимой от нескольких пикселей за ее краем, но это не большая проблема. Конечный результат - это то, что, по крайней мере, выглядит как карта (особенно с хорошей цветовой картой высоты). Учитывая это, возможно, можно сначала создать более грубую карту, которая используется для создания больших различий в высоте для создания горных цепей и морей.
В любом случае, это была моя идея, но я уверен, что уже есть способы сделать это, и я также считаю, что, учитывая спецификацию, многие из вас могут придумать лучшие идеи.
EDIT:
Забыл ссылку на мой вопрос.
РЕДАКТИРОВАТЬ 2:
Я думаю, мне придется уточнить, что важно, чтобы две смежные части карты, сгенерированные отдельно, должны плавно соединяться друг с другом.
РЕДАКТИРОВАТЬ 3:
В комментариях была запрошена дополнительная информация.
Вот изображение, взятое со страницы о фрактале и Perlin Noise , очень похожее на то, что я делал ранее (поскольку моя лучшая попытка, вероятно, использовала Perlin Noise):
http://www.neilblevins.com/cg_education/fractal_noise/perlin_fractal_max_levels2.jpg
Думайте о черных пикселях как о глубоком море, а белые о пикселях как о вершинах гор. Это то, что мне нужно, простая двухмерная карта высот.
Что я хочу сделать, это выбрать любой прямоугольник из очень большого мира (в диапазоне MAXINT * MAXINT пикселей) и сгенерировать его. Если бы я сгенерировал какую-либо часть изображения выше, он должен получить точно такие же пиксели, как если бы я сгенерировал большую часть, охватывающую меньшую.
Теперь к вопросам Unreason:
Требуемая производительность : Моя главная цель - пошаговая RPG, поэтому производительность может быть довольно низкой, но я думаю, что было бы очень интересно узнать, возможно ли создать быстрый алгоритм.
Требования к памяти : желательно, чтобы ничего не создавалось предварительно, но, кроме этого, использование памяти должно соответствовать любой обычной игре или приложению.
Необходимые детали : Ну, если вы посмотрите на изображение, вы получите идею. Хотя было бы очень хорошо, если бы можно было уменьшать и перемещать изображение без необходимости сначала рассчитывать карту с максимально увеличенным уровнем.
Необходимые типы объектов и свойства объектов для генерации : Ничего особенного, я доволен ландшафтом в соответствии с изображением выше. Но я признаю, что думал о подобной установке, где все очень очень большой город. Это был бы другой вопрос.
РЕДАКТИРОВАТЬ 4: Надеюсь, последний.
Хорошо, после прочтения кажется, что Perlin Noise - это то, что нужно. У меня есть еще один вопрос (если кто-то захочет ответить сейчас, когда я принял один (фактически два) ответа :)).
Функция шума Перлина принимает удвоение. Каков диапазон для этих двойников? [0-1 [? Или я могу с удовольствием отправить мои большие целые числа?