Java Perlin Noise для создания 2D-ландшафта

ОБНОВЛЕНИЕ: Официальный список вопросов:

  1. Что представляют собой значения с плавающей запятой (как входные параметры, так и выходные данные) реализации 2D-шума? - Ответ частично, входные данные - это координаты. Как насчет вывода? Кроме того, могу ли я использовать свое целое число в качестве числа с плавающей запятой для координат? 1.0, 122.0 и т. Д.?
  2. Как лучше всего реализовать начальное число в генераторе 2D-шума? Следует ли мне просто сделать его генератором 3D-шума, используя третий параметр в качестве начального значения? Означает ли это, что каждое семя может генерировать уникальный 2D-шум?
  3. Похоже, что в случае с 2d-картой создание растровых изображений происходит в том же направлении. Как я могу сгенерировать растровое изображение из вывода? Предположительно с плавающей точкой.

Мои вопросы: что представляют собой значения с плавающей запятой (как входные параметры, так и выходные данные) 2D-реализации шума Перлина вырезания и вставки? Как мне сгенерировать из них растровое изображение? Если я смогу получить 2-мерный массив некоторого типа данных, я уверен, что смогу понять, как использовать его для имитации моего ландшафта.

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

Хорошо, я понимаю, что этот вопрос задавали много-много раз, поэтому позвольте мне объяснить, что я исследовал и нашел.

Во-первых, я нашел здесь этот сайт, который показался мне победителем. за то, что объяснил мне это. Однако затем я задал еще один вопрос, который я нашел заданным, но на самом деле не ответил полностью здесь.

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

Я нашел здесь вопрос без ответа, о котором я даже не подумал, потому что моя реализация не заработала. Я больше не могу найти ссылку, но в ней говорилось что-то вроде того, даже если у вас была копия и вставленная реализация, какие входы с плавающей запятой вы вводите в функцию? Мне сказали, что мне нужно передать INTEGERS, которые являются моими x и y на карте. Я также получаю выходные данные с плавающей запятой из реализаций вырезания и вставки. Что ЭТО означают? Как эти 2D? Если бы я мог хранить вещи как целые числа, это имело бы смысл в моем мозгу, но в некотором смысле я вижу, что сохранение их как целых чисел было бы неприемлемым для интерполяции и сглаживания значений для непрерывной кривой.


person user1258957    schedule 09.03.2012    source источник
comment
Пожалуйста, отредактируйте свой вопрос. Поместите то, что вы ищете, в начало, а затем объясните, что вы уже пробовали.   -  person Aaron Digulla    schedule 09.03.2012
comment
здесь - это статья, в которой я нашел аналогичный вопрос! Он остался без ответа. Я предоставил немного больше информации о своих попытках найти ответ, поэтому я надеюсь, что кто-то найдет время, чтобы ответить на мой вопрос. Если бы я смог понять это, я бы помог этому другому парню.   -  person user1258957    schedule 11.03.2012


Ответы (2)


Насколько я понимаю код, это просто координаты, для которых вы хотите получить значение.

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

person Aaron Digulla    schedule 12.03.2012
comment
Я не собираюсь использовать какие-либо формы масштабирования. У меня есть двумерный массив плиток, который я хочу определить, является ли он океаном, морем, сушей, холмом, горами и т. Д., В зависимости от высоты. Я выбираю Perlin Noise, потому что мне нужно, чтобы он был непрерывной функцией. (Так что все выглядит гладко). Я мог бы ввести x, y как числа с плавающей запятой (0,0, 1,0), но результат будет с плавающей точкой? Я ожидаю, что на выходе будет высота или что-то, равное высоте. Должен ли я вводить x и y как числа с плавающей запятой, когда базовая функция шума (та, которую использует функция PerlinNoise, но я не использую вручную) принимает целые числа? Эта часть сбивает с толку. - person user1258957; 13.03.2012
comment
Большинству людей, которые занимаются ландшафтом, нужен трехмерный рельеф, поэтому возможность увеличения любой точки поверхности очень важна. Кроме того, когда вы используете шум для расчета текстуры для UV-карты, вам нужны координаты в диапазоне [0,1]. API может сбивать вас с толку, но не у всех есть ваш вариант использования. - person Aaron Digulla; 13.03.2012

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

2 / это здорово:

function rndng ( n: float ): float
{//random linear graph -1, 1
    var e = ( n *122.459)%1;
    return  (e*e*143.754)%2-1;
}

function rnd2d ( n: float, m: float ): float
{//random 2d gooed enough for mountains -1, 1
    var e = ( n*m *31.178694)%1;
    return  (e*e*137.21321)%1;
}

если скорость не является проблемой, вы можете умножить 5-10 из них для суперслучайной функции, в противном случае это самая быстрая для процессора, эта функция.

3 / вам необходимо получить доступ к функциям библиотеки чтения и записи растрового изображения и записать пиксели, т.е. получить пиксель, установить пиксель. для чтения и записи растровых изображений, а также для создания и сохранения файлов растровых изображений и имен файлов.

person predatflaps    schedule 05.03.2014