Показать сообщение отдельно
Старый 23.03.2013, 05:35   #1
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Моделирование сферического игрового пространства (планета)

Заинтересовался идеей не плоского мира, а сферического, отличный пример - планета.

Давайте по обсуждаем идею, математические и алгоритмические сложности данной задачи, и вообще идеи по моделированию планет и игрового пространства на них.

Например давайте посчитаем сколько данных нужно для высотной карты всей планеты Земля?
Земля имеет радиус 6,378,100 метров.
Используя формулу площади сферы - 4 * PI * r^2 мы получим площадь планеты земля: 511,201,962,310,545 кв. м.
Далее зная площадь, если мы хотим создать высотную карту всей планеты с детализацией до 1 метра, нам понадобиться предположим 2 байта на ячейку. И это выходит 929.871 терабайт данных.
Естественно числа заоблачные, что говорит о создании высотной карты всей планеты - не вариант для игр.
Конечно есть интересные подходы совмещения подготовленных и процедурных данных, теоретически можно иметь детализацию всего на каждый километр, тем самым снизить объём данных всего до 975.04 мегабайт на всю планету! Ну и далее использовать процедурный шум для детализации, но естественно детальность не будет столь качественной и реалистичной, но для космического симулятора - по моему отличный вариант.

А теперь представьте сколько данных хранит Google для их карт, снимков satelite, и ещё не забываем что основные карты они генерируют на лету при каждом запросе.


Но отклонимся от высотной карты.
Как насчёт координатной системы?
В плоском мире используется X и Y. А в плоском 3D мире X, Y и Z, но сам мир по прежнему плоский, что делает эти координаты всегда прямыми.
В сферическом мире - это Прямоугольная Система Координат (Cartesian coordinate system). Основная разница в том что например координата Y - не будет указывать на высоту объектов от уровня моря (например), а в абсолютных координатах будет указывать "вверх" относительно севера. Что на разных позициях на планете воспринимается по разному. На южном полюсе - это это указывает под землю, а на экваторе вдоль земли, а на севере от земли.
Следственно работа с прямоугольной системой координат не удобна для математики и логики работы с поверхностью земли.

Есть Сферическая Системам Координат, которая хранит координату в трёх измерениях, расстояние до центра, зенитный и азимутальный угол.
Такая система координат возможно удобна для навигации, т.к. зенит и азимут весьма интуитивны для представление относительно сферы.
Но я не вижу никакого применения в математике этой системы координат.

Далее идут Географические Координаты (Geographic coordinate system), это очень схожая система координат со сферической, но немного удобнее засчёт более интуитивных углов.
Мы повседневно имеем дело с этой системой координат используя GPS навигаторы.
Т.к. на нашей планете нам не нужно знать о расстояния от центра земли, мы обычно имеем лишь долготу и широту (longitude, latitude), и эти два числа очень удобны в ориентировании снова.
Но в 3Д они снова слабо применимы. Во первых вычислять расстояние между ними воспринимая их как X и Y в корню не верно. Т.к. расстояние по сфере - это дуга а не две точки.
Также выше от экватора долгота имеет меньшее расстояние между градусом.
В интернетах часто можно встретить как кто-то используя Google Maps берёт долготу и ширину и применяет теорему пифагора для вычисления дистанции, и затем умножает на коэфициент (который видиом подобрал), таким образом "получает" расстояние в километрах (или других мерках). Но проблема в том что на экваторе это может и будет работать с верных коэффициентом, а вот на полюсах совсем нет.
Следственно вычисление расстояния не так и просто, т.к. работая с углами, нужно вычислять по дуге. Благо формул в интернетах не мало.

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

Так что же, мы получается возвращаемся к X, Y, Z? По моему - да.
Только вот как же делать разного рода вычисления корректно, учитывая все сложности не плоскости пространства.

У меня была идея что нужно трансформировать все координаты для определённого вида, исходя из того где находится камера. Например если центра вычисления на Аляске, что выше экватора но не на полюсе, то нужно трансформировать все данные с которыми предполагается вычисления. Поворачиваем их так, чтобы X и Z - были перпендикулярны вектору от центра камеры к центру планеты.
Тогда X и Z - будут как в плоском мире, а Y - будет высотой от земли.

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



Вообще интересует кто таки дочитал до конца, и что думает по этому поводу?
Особенно интересует методы проецирования сферических данных на плоскость в мелких масштабах.
(Offline)
 
Ответить с цитированием