Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 Контент вільний від AI. Цей пост на 100% написаний людиною, як і все на моєму блозі. Насолоджуйтесь!

05.05.2023

Роблю перехід з глобуса на локальну карту

Продовжую змагатись з 3D-графікою, а саме, намагаюсь зробити перехід від глобуса до локальної карти. На перший погляд, задача не тільки проста, але й незрозуміло, що то взагалі за перехід, якщо фактично карта залишається тією самою.

Ось тільки рідко так буває, що 3D “сцена” відтворює реальну структуру фізичних обʼєктів, які вона відображає. Так, хоч локальна карта і є, теоретично, частиною глобуса, але для відображення її в 3D використовувати ту саму модель недоцільно. Глобус складається з тисячі трикутників, тож сторона кожного з них десь близько 500 км. А локальна карта має сторону у 25 разів менше. Тому навіть думати про глобус та карту в одній системі координат незручно.

Отже, після повного наближення “з космосу” до місця треба зробити фокус та підмінити глобус на карту. Цим трюком я й займаюсь. Потрібно зорієнтувати карту в таке саме місце та в такому самому масштабі, та задача зроблена.

От тільки виникла проблема. Який саме масштаб я хочу показати? В попередньому демо локальною картою є просто одна плитка текстури. Але ж для кінцевого варіанту треба вирізати з неї шматок, що відповідає заданому треку. Тут довелося знову пірнати в математику. Координати, що обмежують трек, відомі. По координатах можна вийти на розмір в метрах. Далі в метрах можна обвести трек квадратом, а цей квадрат знову перевести в координати. (Ще цікава річ — координати не відповідають кілометрам однорідно, бо довжина градуса довготи залежить від широти, на якій його вимірювати.)

Потім, маючи координати границь видимої області, можна знайти їх в межах координат плитки (які можна обчислити оберненою формулою від меркаторівської проєкції), та, нарешті, побудувати відповідні координати текстури та висоти нашої локальної карти. Фух! І це ще без анімації.

Чому навчився: налагодити всю цю складну математику легше, коли текстури відображають щось наочне; в мене був прямо прорив, коли я просто намалював на карті коло на місці треку та стрілочку на південь — якийсь компас. Але взагалі існує цілий клас допоміжних текстур в кліточку, по якім можна помітити недоліки текстурних координат.