Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2012, 23:57   #1
Nikk[UA]
Пользователь
 
Регистрация: 24.01.2011
Сообщений: 41
По умолчанию Попиксельная генерация мира

Здраствуйте. Я пишу игру на подобие терарии. Перед мною стоит такая проблема: как сгенерировать красивый мир? Пишу на delphi 7. Для рендера использую opengl.

Так вот, нужно сгенерировать мир в двухмерном массиве.

Цитата:
IDWorld : Array [0..10000-1, 0..1000-1] of GLUbyte;
где 0..10000-1 это 10000 пикселей по x, а 0..1000-1 это 1000 по y.

при генерации ланшафт должен быть красивым, тоесть с горами, холмами и деревьями. Подскажите в какой способ это лучше сделать?
Nikk[UA] вне форума Ответить с цитированием
Старый 13.06.2012, 07:58   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Представления о красоте пока не формализованы, и вряд ли когда эта задача будет решена в полном объеме.
Для генерации ландшафта приемлемые результаты дает perlin noise. Алгоритм достаточно прости и содержит набор настроечных коэффициентов, при помощи которых можно добиться желаемого результата.
Ну а деревья, я так понимаю, нужно генерить отдельно и расставлять по уже имеющемуся ландшафту.

Последний раз редактировалось s-andriano; 13.06.2012 в 08:00.
s-andriano вне форума Ответить с цитированием
Старый 13.06.2012, 11:35   #3
Nikk[UA]
Пользователь
 
Регистрация: 24.01.2011
Сообщений: 41
По умолчанию

Перлин - хорошая идея. спс

Вот нашел код, но он не для делфи, а для c++ или c#, короче хрен его знает. Если не сложно, переведите на старую добрую делфи

Цитата:
function IntNoise(32-bit integer: x)

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

end IntNoise function
Nikk[UA] вне форума Ответить с цитированием
Старый 13.06.2012, 20:35   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А зачем Вам именно этот код.
Судя по всему, это одна из реализаций ДПСЧ.
Можно воспользоваться любой другой. Хоть стандартный random.
s-andriano вне форума Ответить с цитированием
Старый 13.06.2012, 21:05   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Вот нашел код, но он не для делфи, а для c++ или c#, короче хрен его знает
На c# нет функций. Возможно это бейсик...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.06.2012, 23:03   #6
Nikk[UA]
Пользователь
 
Регистрация: 24.01.2011
Сообщений: 41
По умолчанию

С random не достичь такого ефекта реальности ланшафта как с perlin noise. Жду либо альтернативы либо перевода данного кода.

Уткин, не думаю что это бейсик! Мена интересует что такое
Цитата:
x<<13
и
Цитата:
7fffffff
Остальное я сам смогу перевести.

Последний раз редактировалось Nikk[UA]; 13.06.2012 в 23:05.
Nikk[UA] вне форума Ответить с цитированием
Старый 13.06.2012, 23:27   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
& 7fffffff
Это маска. 31 единичный бит. Т.е. такой код отбросит бит знака от числа. Десятичное представление: 2147483647.
Код:
x<<13
Битовый сдвиг. На дельфи: x shl 13.

Попробуйте:
Код:
function IntNoise(x: integer):integer;
begin	
x := (x shl 13)  xor x;
result := (1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) and 2147483647) / 1073741824.0); 
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 13.06.2012 в 23:30.
BDA вне форума Ответить с цитированием
Старый 14.06.2012, 19:34   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Nikk[UA] Посмотреть сообщение
С random не достичь такого ефекта реальности ланшафта как с perlin noise.
Аргументировать можете?

PS. Сравнивать perlin noise и random - примерно то же самое, что сравнивать здание с кирпичом.
s-andriano вне форума Ответить с цитированием
Старый 14.06.2012, 22:58   #9
Nikk[UA]
Пользователь
 
Регистрация: 24.01.2011
Сообщений: 41
По умолчанию

Могу. С рандомом получается очень кривая и ломаная линия которая напоминает скорее кардиограмму. Плюс в придачю рандом какой то глюканутый. Я задал чила от 0 до 10, а оно постоянно 1 или 2 выбирает.

А с перлином я достиг более мение нормального ланшафта. Хотя и у перлина целый вагон недостатков.
Nikk[UA] вне форума Ответить с цитированием
Старый 15.06.2012, 07:17   #10
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Nikk[UA] Посмотреть сообщение
Могу. С рандомом получается очень кривая и ломаная линия которая напоминает скорее кардиограмму. Плюс в придачю рандом какой то глюканутый. Я задал чила от 0 до 10, а оно постоянно 1 или 2 выбирает.

А с перлином я достиг более мение нормального ланшафта. Хотя и у перлина целый вагон недостатков.
Еще раз:
random и perlin - алгоритмы разного уровня, и сравнивать их между собой нельзя.
Ваше утверждение напоминает:
Когда я строю дом, он выходит хорошо, а когда из кирпича - плохо.
Качество ГПСЧ, конечно, имеет значение (и не только в алгоритме Перлина), но при вменяемом ГПСЧ результат (в смысле Pelin noise) будет примерно одинаков.
Проверено.
Вы еще скажите, что Перлин хорошо получается на Си и плохо - на Делфи.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Попиксельная обработка изображения shushlev Мультимедиа в Delphi 17 15.05.2013 20:27
Попиксельная отрисовка массива ? frosti Общие вопросы C/C++ 0 24.04.2012 02:04
Попиксельная отрисовка игры с пиксельной физикой (C++) dart193 Помощь студентам 2 09.12.2011 03:47
попиксельная прорисовка линии Valuh Помощь студентам 1 17.11.2010 18:39