timewarp
), диагностики и многого другого. В общем случае трекеры:a(t) = rotationBSpace * b(t) * rotationARelativeToB
для любого времени t
.ITrackingAlignment
. При создании экземпляра оптимизатора задаются параметры initialARelativeToB
(компонент в Placement) и initialTimeBAheadOfA
(предполагаемое время задержки между данными трекинга). A
— это трекер Alt, B
— сторонний трекер. Структура State
— это состояние оптимизатора, в ней хранятся данные о повороте Alt относительно стороннего трекера, относительный поворот сторонней системы координат мира и задержка между данными трекинга. При обновлении этих полей используются данные поворота Alt (без экстраполяции), данные поворота стороннего трекера (как есть) и текущее время (заданное от какой-либо конкретной точки отсчёта, например, от запуска программы). Все повороты задаются с помощью кватернионов.State
.State.timeBAheadOfA
положительное, иначе отрицательное.using Antilatency.TrackingAlignment; ILibrary alignmentLibrary = Antilatency.TrackingAlignment.Library.load(); ITrackingAlignment trackingAlignment = alignmentLibrary.createTrackingAlignment( initialARelativeToB, initialTimeBAheadOfA ); ... while (...) { State state = trackingAlignment.update( alt.state.pose.rotation, rotationB, currentTime ); < use state somehow > ... }