PDA

Просмотр полной версии : Планета sweeper'а



sweeper
05.04.2012, 18:24
Подброшу-ка я вещества в вентилятор.
5310

Peter
05.04.2012, 20:59
о, круто!
симпатичный шарик
хотя подобное уже делал super, может было проще заюзать его наработки?

а перепады высот будут только цветом или формой тоже?
если второе, то как планируешь делать их?

какой по размеру максимальный пробовал шар?
с каких размеров становятся заметны искажения формы тайлов?

sweeper
05.04.2012, 21:27
о, круто!
симпатичный шарик
хотя подобное уже делал super, может было проще заюзать его наработки?
Я, честно говоря, не спрашивал. Кроме того, там тайлы треугольные.


а перепады высот будут только цветом или формой тоже?
если второе, то как планируешь делать их?
хотелось сделать формой. Алгоритм был примерно такой: высоту для вершин усредняем по трем тайлам, которые сходятся в этой вершине.
Получается объемный пяти или шестиугольник, который разбивается на треугольники. При максимальном использовании opengl на весь объемный (5/6)-угольник можно натянуть текстуру. Пока текстур нет, высота просто хранится в тайле.
Но! Реализм же. Радиус Земли 6320Км, что на этом фоне гора в 5Км?


какой по размеру максимальный пробовал шар?
с каких размеров становятся заметны искажения формы тайлов?Пробовал Big, строит около минуты на i5/2.4GHz/8Gb/windows 7/64
Giant не дождался.
Про искажения не понял. Там 12 пятиугольников, вокруг них 6-угольники слегка искажены. Это всё. Конкретная форма тайла значения не имеет. Важно, чтобы тайлы знали о соседях.

Aku_Aku
05.04.2012, 21:39
Я, честно говоря, не спрашивал. Кроме того, там тайлы треугольные..

Не имеет смысла.
Там уровень кода никакущий.
Наде6юсь в этом варианте не так...
так же как и в том, что он будет открытым ;)

Не знаю, я даным мне доступом не пользовался.
С пользовательскими настройками там ведь ничего не поставить?
Да я и не совсем понимаю замысел?




Но! Реализм же. Радиус Земли 6320Км, что на этом фоне гора в 5Км?


Да. РеализмЪ.
Только у нас ведь не космосим, а историческая стратегия.
Хотелось бы при большем приближении, чтоб выглядело как плоскость...

superregistr
05.04.2012, 21:57
Aku_Aku, ты по старым наработкам судишь, а у меня много чего внутри переделано было, что снаружи не заметно.

Алгоритм сферы примерно такой: каждый треугольник икосаэдра делить не 4, а на 9 частей. Тогда будут шестиугольники.

superregistr
05.04.2012, 22:03
Важно, чтобы тайлы знали о соседях.
У меня каждый тайл имеет две координаты: номер слоя (отсчитывается с севера на юг) и номер в слое (отсчитывается по правилу правого винта). Потом я установил между тайлами аналитическую связь. Много бумаги исписал.

sweeper
05.04.2012, 22:06
Потом я установил между тайлами аналитическую связь. Много бумаги исписал.А я решил, что у меня бумаги и так много. Да и мозги уже не те. Наверное, можно было бы... Но мне лень.

superregistr
05.04.2012, 22:29
http://www.gamedev.ru/files/images/?id=61610

superregistr
05.04.2012, 22:32
http://forums.arcanumclub.ru/uploads/post-3864-1318176064_thumb.jpg

pioner
06.04.2012, 02:26
Как по мне - не ровный "шарик".

Peter
06.04.2012, 08:23
Я, честно говоря, не спрашивал. Кроме того, там тайлы треугольные.
ну у него промежуточный вариант был вроде с шестиугольными тайлами..


хотелось сделать формой. Алгоритм был примерно такой: высоту для вершин усредняем по трем тайлам, которые сходятся в этой вершине.
Получается объемный пяти или шестиугольник, который разбивается на треугольники. При максимальном использовании opengl на весь объемный (5/6)-угольник можно натянуть текстуру. Пока текстур нет, высота просто хранится в тайле.
можно наоборот высоту в вершине хранить, а для тайла (для игровых расчетов) высчитывать среднюю из всех его вершин



Пробовал Big, строит около минуты на i5/2.4GHz/8Gb/windows 7/64
Giant не дождался.
а big и giant как количественно выражены?
сколько тайлов?

sweeper
06.04.2012, 14:19
а big и giant как количественно выражены?
сколько тайлов?
(убрал отладочную печать, теперь реально дождаться)
Giant: 94 сек, тайлов: 10832
Big: 27 сек, тайлов: 5882
Ну и результат мне пока не очень нравится. Плосковато. Гондвана получается. Надо дальше думать про алгоритмы генерации высот.

Yorick
27.01.2013, 11:35
Вот Аку выкладывал ссылку на проект Basic Hex Map Sphere (http://sourceforge.net/projects/hexmapsphere/?source=directory)

http://sourceforge.net/projects/hexmapsphere/screenshots/GHMScreenShot01.JPG/182/137

Интересно? или ты тоже к этому имеешь отношение?

sweeper
27.01.2013, 11:45
Интересно? или ты тоже к этому имеешь отношение?Посмотрю, спасибо. Удивительно, те же самые искажения 6-угольных тайлов вокруг пятиугольных. Нет, отношения не имею. Кроме того, у меня фон белый :)

Garik710
08.01.2014, 22:07
Не поделитесь секретом, как вычислять вершины в таком шаре, или ссылочкой, где это описывается.

И ещё, как создать алгоритм поиска кратчайших путей на такой карте?

sweeper
09.01.2014, 08:30
Не поделитесь секретом, как вычислять вершины в таком шаре, или ссылочкой, где это описывается.Начал с тех 12 вершин, которые будут пятиугольными тайлами. Их координаты вычисляются как координаты четырех углов трех "золотых" прямоугольников. (см икосаэдр: http://ru.wikipedia.org/wiki/%D0%98%D0%BA%D0%BE%D1%81%D0%B0%D1%8D%D0%B4%D1%80, золотые прямоугольники http://www.opengl.org.ru/books/opengl1_402.html) Дальше брал вершины по три штуки, такие, чтобы образовывали грань икосаэдра, и достраивал до нужной мне сетки. Там сложновато, много констант, которые определяют законы разбиения. Но если попробовать разбить ручками несколько раз, приходит ясность.


И ещё, как создать алгоритм поиска кратчайших путей на такой карте?После того, как для каждого тайла известны его соседи, можно использовать алгоритм "A*" (http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_A*). Суть такова: из пункта А в пункт Б попадаем не более чем N шагов, где N -- общее количество тайлов. Для начала распихаем во все тайлы число N как количество шагов, необходимых для достижения пункта А. Потом вспомним, что из пункта А в пункт А шагов не надо, и поместим в А число 0. Далее цикл, пока есть изменения. Для внесения изменения берем каждый тайл и смотрим его соседей. Для всех соседей вычисляем минимум шагов, записанных в тайле, пусть это M. Если в самом тайле (центральном, который сейчас меняем) число больше, чем (M+1), записываем в тайл число M+1 и фиксируем факт, что есть изменение. Напоминаю, внешний цикл идет пока есть изменения. Как только после очередного просмотра изменений нет, выходим из цикла и строим путь из пункта Б в пункт А. Для этого берем число шагов пункта Б, вычитаем 1 и ищем соседа, у которого число шагов в точности равно этому значению. Переходим в этого соседа, уменьшаем число шагов на 1 и снова ищем соседа. Сосед с числом шагов 0 и будет пунктом А.

Garik710
09.01.2014, 16:48
Над построением буду думать, спасибо, а с алгоритмом А* я знаком, просто сбивает с толку необычное расположение и различная форма тайлов.