Стендап Сьогодні
📢
Канал в Telegram @stendap_sogodni
🦣
@stendap_sogodni@shevtsov.me в Федиверсі
17.06.2025
Проєкція GPX на світлину 2
А це вже щось. У врізці — той самий трек, тільки накладений на мапу.
🖼️ …В продовження вчорашньої теми, доробив до якогось результату, але далі, здається тільки з ручною роботою (про що нижче).
Сьогодні займався впорядкуванням того, що вчора накидав, бо досяг межі, коли далі йти нереально. Зокрема, завдяки нормальному потоку перетворень точок, зміг взяти частину точок, видиму в кадрі, та зберегти відповідний GPS-трек у GeoJSON, звідки його дуже легко побудує GitHub Gist (такий вам трюк в нотатки — це найлегший спосіб показати геодані на мапі.)
Це я робив для того, щоб переконатися, що цей хаос точок дійсно відповідає моєму кадру. Та, на велике задоволення, переконався. Значить, я правильно орієнтую камеру, та залишається питання проєкції.
Дізнався, що камери Three.js перетворюють координати в так звані NDC - нормальні координати екрана. Це не зовсім те, що я очікував — а саме, куб від -1 до 1, де з X та Y все більш-менш зрозуміло, а Z включає весь простір від найближчої до найдальшої площини області видимості. Все це треба знати, щоб вірно розташувати результати в кадрі та відітнути невидиме. (Оце починаєш спочатку робити випадкові зміни, щоб тільки запрацювало, а потім виявляється, що половину треба відкотити та зробити по-правильному.)
І другий момент, який довелося серйозно передивитися — це кут огляду. Виявляється, що айфон звітує горизонтальний кут, а Three.js хоче вертикальний кут огляду. Та щоб перетворити, там мало поділити на співвідношення сторін, а є дика формула із тангенсами-арктангенсами. Після того як виправив кут огляду, картинка нарешті почала сходитися з реальністю.
Далі результати ускладнюються двома моментами. Менш важливий — це похибка GPS. Якщо відстань до треку достатня, ти її й не помітиш. Але дійсно проблема — це поведінка акселерометра. Якщо телефон не знаходиться в спокої, то акселерометр показує не вниз, а в напрямку руху (грубо кажучи.) А хто ж зі штатива знімає…
Зате якщо дозволити ручне керування, то можна “від першої особи” виправити, просто рухом миші чи пальця. Бо нам треба лише трішечки скоректувати напрямок камери. Але то вже буду доробляти коли буде настрій наступного разу.