Поиск:

Ответ в темуСоздание новой темы Создание опроса
> шум перлина 
:(
    Опции темы
xTr1m
Дата 19.3.2013, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



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

PM MAIL WWW ICQ   Вверх
xTr1m
Дата 19.3.2013, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



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

_inline float CMyNoise::Noise2D(int x)
{
  int n = x:
  n = (n<<13) ^ n;
  return ( 1.0f - ( (n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff) /
      1073741824.0f);
}

но ведь сама по себе она не дает рандомности? Или мне нужно получить шум, прибавить его к исходному числу и потом на вход уже подавать этот результат?
PM MAIL WWW ICQ   Вверх
xTr1m
Дата 19.3.2013, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



вот, например, кусок. но в чем рандомность? или что-то нужно еще добавить?
Код

function Noise1(integer x)
    x = (x<<13) ^ x;
    return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);    
  end function


  function SmoothedNoise_1(float x)
    return Noise(x)/2  +  Noise(x-1)/4  +  Noise(x+1)/4
  end function


  function InterpolatedNoise_1(float x)

      integer_X    = int(x)
      fractional_X = x - integer_X

      v1 = SmoothedNoise1(integer_X)
      v2 = SmoothedNoise1(integer_X + 1)

      return Interpolate(v1 , v2 , fractional_X)

  end function


  function PerlinNoise_1D(float x)

      total = 0
      p = persistence
      n = Number_Of_Octaves - 1

      loop i from 0 to n

          frequency = 2i
          amplitude = pi

          total = total + InterpolatedNoisei(x * frequency) * amplitude

      end of i loop

      return total

  end function

PM MAIL WWW ICQ   Вверх
Bitter
Дата 21.3.2013, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 4
Всего: 27



мне кажется рандомность, а точнее псевдорандомность получается из-за многочисленного переполнения регистра, но для одного и того же числа оно будет одинаковое. по этому можно либо добавить сюда еще время (чем мельче интервал тем лучше) или подавать на вход результат предыдущего выполнения, как вы и сами уже догадались
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.