![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
ALexusB |
![]()
Сообщение
#1
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Народ, нужна помощь в одной интересной задаче для нужд игры про "кораблики" не на стром-2.х
Уперся в генерацию (роботом) дна (мелей) Дано: Есть матрица, например, 64х64 или 100х100, не важно, хоть 100х60 клеток. Значение клеток - это глубина в метрах. Для простоты считаем до 7 метров, далее для корабля не важно - "нет дна". То есть 1 2 3 4 5 6 7 видов значений. переходы глубин плавные, то есть 1-2 2-3 и тп, 1-7 или 1-3 быть не может. Рандомно задаются: - место мели в матрице - размер и форма мели - ширина полоски перехода на каждую глубину (то есть ширина 1-2, 2-3... можно одну на всех - это частный случай) - число мелей (они могут быть в нескольких местах или накладываться, тогда переходы будут 1-2-3-4-3-2-1 или 1-2-1, зависимо от расстояния) Требуется Алгоритм генерации мелей амебообразной формы (из значений 1) с плавным переходом в 7 Решение ??? Какие есть идеи? Понятно, что вариант наколбасить все ручками рабочий - редактор такой сделать не вопрос, он у мя уже почти готов. Но хочется, чтоб само делало, каждый раз разное |
![]() ![]() |
TAHAT |
![]()
Сообщение
#41
|
Подвергающий ласкам ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: модераторы Сообщений: 4,548 Регистрация: 22-March 05 Из: Бердск, НСО Пользователь №: 594 ![]() |
Человек на твоей задаче магистерскую работу защитил... и статью написал:
|
ALexusB |
![]()
Сообщение
#42
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Спасибо за статью!!!
накидаю несколько вариантов - покажу результаты по алгоритмам переходы тоже будут с допусками в стыках, но пойдет. Там можно еще нормализацию добавить - то есть не все поле заполнять рандомно - а избранные места. Предварительно заполнив глубиной по мах. |
ALexusB |
![]()
Сообщение
#43
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Получилось
рельеф есть - факт. Баланса для карты нет - тоже факт. Фарватера нет или нужно глубин вводить больше. Тут не совсем приведенный алгоритм, скорее тасовка нормализаций и сдвигов высот. Еще повожусь и подберу нужное Можно настройкой играться - совсем мелко или глубоко. В целом, я удовлетворен - работает шустро, визуально приемлимо, осталось только протности задавать, чтоб густо-пусто было. Типа пирамидок рендомной формы. |
N.tony |
![]()
Сообщение
#44
|
пират ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 1,060 Регистрация: 9-July 08 Пользователь №: 17,197 ![]() |
Если я не сильно поздно, я бы тоже предложил
![]() Если вам нужна модель дна, не пристыкованного к суше (т.е. без начально заданных краев с некоторых сторон), то можно использовать простейший способ а-ля "карта высот": В фотошопе есть специально обученный фильтр "облака". Создав новый файл нужного размера, просто применить черно-белый вариант облаков, а затем проскейлить цвет каждой точки (белый -> 1, черный -> 7). В результате получится, в общем-то, то что надо: Прикрепленные изображения ![]() |
Tymofei |
![]()
Сообщение
#45
|
Приватир ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 3,759 Регистрация: 20-November 07 Из: Москва Пользователь №: 12,641 ![]() |
|
N.tony |
![]()
Сообщение
#46
|
пират ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 1,060 Регистрация: 9-July 08 Пользователь №: 17,197 ![]() |
Мулька в том, чтобы визуально отображались математические значения. Если возвращать значения глубин по распознаванию цветов получится не айс - метод будет медленным, ИМХО. Если сохранять изображение как серый битмап, то в итоге там и будет матрица со значением 0-255 для каждой точки. Распознавать ничего, собственно, не надо: Код 7-H=(X-S)/Y Где H - итоговое значение глубины, X - значение, записанное в битмапе, S - шифт для сдвига всего изображения в более "глубокую" область, а Y - собственно, коэффициент. Он считается как-то типа (255-S)/7, ну а потом просто надо округлить правую часть и отрицательные значения делать нулем. Как-то так. |
ALexusB |
![]()
Сообщение
#47
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Сохранать нагенеренное == рисовать руками (с использованием спец средств)
К этому и пришел - генерировать мели, как уровни для игры бесполезно на данном этапе. Мне сча, как показала разработка, мели вообще не нужны - я их просто не буду делать, это задел на потом, если оно (потом) будет. |
N.tony |
![]()
Сообщение
#48
|
пират ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 1,060 Регистрация: 9-July 08 Пользователь №: 17,197 ![]() |
Сохранать нагенеренное == рисовать руками (с использованием спец средств) К этому и пришел - генерировать мели, как уровни для игры бесполезно на данном этапе. Мне сча, как показала разработка, мели вообще не нужны - я их просто не буду делать, это задел на потом, если оно (потом) будет. Ну, это же только первый набросок, так сказать ![]() Я вот так сильно заинтересовался этим вопросом, что даже почитал литературы: В целом, покопавшись немного, заалгоритмил метод midpoint displacement, с помощью которого получается примерно такая картина. Upd Еще добавлю анимашку про то как оно получается ![]() Вот ведь мне делать нечего по выходным... Прикрепленные изображения ![]() ![]() |
N.tony |
![]()
Сообщение
#49
|
пират ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 1,060 Регистрация: 9-July 08 Пользователь №: 17,197 ![]() |
Как я и предполагал, если коэффициенты смещения поставить максимальными где-то на четвертом шаге, структура получается более разрозненной - мели организуются в разных местах и в бОльших количествах.
На момент, видимо, сделать что-то существенно лучше с midpoint displacement не получится - и так на картинке видно, что из-за ненатурального изменения параметров появляются небольшие артефакты в виде горизонтальных и вертикальных "дорожек". Дальше только если подключать, например, диаграммы Вороного - это, в целом, как раз для изначального засеивания поля мелями, а затем уже использования смещений для "шума". Боюсь, пока заалгоритмить эту штуку я не смогу - надобно читать умные книжки, а это не так увлекательно ![]() З.Ы. Прикрепленные изображения ![]() |
ALexusB |
![]()
Сообщение
#50
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Результат впечатляет, особенно анимированное масштабирование.
Другое дело, что начав делать не конкретные заготовки и набирать возможности под игру, а спланировав конкретные модули, БД и сетевое общение, я понял, что мели - это делекое будущее. Они ж на ИИ тоже влияют, а у меня пока даже тупого нет. Реальный генератор ландшафта красив, я выше по ссылкам делал как пример - но это не играбельно ![]() Приведенное в #49 тоже не играбельно в силу того, что на такой карте низя играть - она не в балансе. Нужно больше воды и меньше мелей, чтоб карта была стратегической в плане боя большой вс. мелкий корабль Пока мне видится генератор карт из нарисованных руками мелей (шаблонов) Сам шаблон может генерится по формулам, а потом руками его "принять, не принять". Мелей в сумме должна быть не более 20% карты и должны быть явные фарватеры для кораблей |
Serginio |
![]()
Сообщение
#51
|
инопланетянец ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 2,018 Регистрация: 7-August 07 Из: Днепропетровск Пользователь №: 11,632 ![]() |
Мелей в сумме должна быть не более 20% карты и должны быть явные фарватеры для кораблей Если в генератор засунуть не 7 высот, а скажем 10-12, и утопить ландшафт до самой верхней отметки, то дорожки-фарватеры появятся сами собой. Там, где преобладать будут глубокие значения пикселов ![]() Попробуй мысленно притопить карту из #49 и мелкому кораблику будет раздолье, а крупный тоже сможет вывернуться, но уже с трудом... |
ALexusB |
![]()
Сообщение
#52
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Тоже делал, делал по 20-30 высот и обрезал по 7, типа как горы задить водой - будут острова-мели
Токо получается криво - квадратики большие, высот мало, а генерится оно "естественно", то есть просто пятнами перехода Пирамидка в виде основания облочка не получается этим генератором. Ее проще самому нарисовать (шгаблоны) разных форм. |
Serginio |
![]()
Сообщение
#53
|
инопланетянец ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 2,018 Регистрация: 7-August 07 Из: Днепропетровск Пользователь №: 11,632 ![]() |
Тоже делал, делал по 20-30 высот и обрезал по 7, типа как горы задить водой - будут острова-мели Токо получается криво - квадратики большие, высот мало, а генерится оно "естественно", то есть просто пятнами перехода Пирамидка в виде основания облочка не получается этим генератором. Ее проще самому нарисовать (шгаблоны) разных форм. Хм. То, что высот мало - решаемо. Нужно не только низ обрезать, а и верх. Тогда мель будет не в виде пика, а в виде какого-то пятна. Типа была пирамидка над водой, потом море верхушку обрушило до уровня воды (срезало). Квадратики большие - вроде от масштаба зависит. А форма основания не критична, более критична пологость склонов. Дальше пусть рандомно расползается. Мне в этом плане понравилась система, которую Танат подсказал (по ссылке). Ещё зимой смотрел. Там можно изощратся по всякому. |
N.tony |
![]()
Сообщение
#54
|
пират ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 1,060 Регистрация: 9-July 08 Пользователь №: 17,197 ![]() |
Мелей в сумме должна быть не более 20% карты и должны быть явные фарватеры для кораблей Обрезать-то можно по-всякому, но получится, например, вот так: Прикрепленные изображения ![]() |
Serginio |
![]()
Сообщение
#55
|
инопланетянец ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 2,018 Регистрация: 7-August 07 Из: Днепропетровск Пользователь №: 11,632 ![]() |
Если под мелями тут имеется в виду любая точка с высотой меньше 7, то 20% - это как-то маловато... Обрезать-то можно по-всякому, но получится, например, вот так: Не-не. 20% - это самый гут. Вот, если бы на этой мигающей картинке ещё мелкие точки убрать (алгоритмом), а оставить только крупные пятна мелей, то было бы очень похоже на правду. |
ALexusB |
![]()
Сообщение
#56
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Анимация воды на флаше. Линки давал когда-то, раз тему восстановили вопросом про волны, то освежим
Я пробовал пару способов, но уперся в тормоза. Нужно мудрить слоем размером с экран, а не все поле локации делать с водой. |
![]() ![]() |
Текстовая версия | Сейчас: 29th April 2025 - 21:52 |