Системы координат EasyAR
В 3D-программах определение систем координат очень важно. Если не указано иное, используются следующие соглашения.
Все векторы являются векторами-столбцами.
Все матрицы используют порядок row-major. (OpenGL использует column-major)
Все системы координат являются правосторонними. (Согласовано с OpenGL)
Если система координат имеет физический масштаб, единицей измерения является метр.
Отрицательное направление оси Y мировой системы координат является направлением гравитации.
В системе координат устройства ось X направлена вправо, ось Y направлена вверх, а ось Z направлена наружу от экрана. Для устройств, экран которых может вращаться, определения вправо и вверх основаны на ориентации по умолчанию. В частности, ориентация Android по умолчанию следует системному определению. (Альбомное положение является ориентацией по умолчанию для очков и некоторых планшетов, а портретное положение — для телефонов и некоторых планшетов.) Ориентация iOS по умолчанию — портретное положение. (Согласовано с определениями в документации IMU Android и iOS)
Pose для отслеживания объектов
Pose объекта при отслеживании плоских изображений (ImageTracker) и 3D object tracking (ObjectTracker) хранится в pose и представляет положение и ориентацию текущего отслеживаемого target относительно camera. И система координат camera, и система координат target являются правосторонними. Начало системы координат camera находится в оптическом центре камеры, положительное направление оси x направлено вправо, положительное направление оси y направлено вверх, а положительное направление оси z направлено в сторону входа света в камеру (наружу от экрана). (Здесь вправо и вверх означают вправо и вверх на изображении camera, что может отличаться от естественной ориентации устройства.) Данные расположены в порядке row-major, противоположном column-major в OpenGL.
Pose можно записать так:
Если 3D engine использует другие определения осей координат, это нужно учитывать при настройке матрицы transform в 3D engine. Например, когда направления z в системе координат camera и системе координат target противоположны, значение матрицы transform узла target в 3D engine должно быть задано как:
Transform для motion tracking
transform для surface tracking (SurfaceTracker), а также cameraTransform для motion tracking (MotionTrackerCameraDevice), ARKit (ARKitCameraDevice) и ARCore (ARCoreCameraDevice) представляют transform камеры относительно мировой системы координат. И система координат camera, и мировая система координат являются правосторонними. Начало системы координат camera находится в оптическом центре камеры, положительное направление оси x направлено вправо, положительное направление оси y направлено вверх, а положительное направление оси z направлено в сторону входа света в камеру (наружу от экрана). (Здесь вправо и вверх на мобильных устройствах означают вправо и вверх в естественной ориентации устройства.) Ось y мировой системы координат направлена вверх (противоположно направлению гравитации), а начало определяется системой motion tracking. Данные расположены в порядке row-major, противоположном column-major в OpenGL.
Pose в sparse spatial map и Mega
getMapPose для sparse spatial map SparseSpatialMap и pose в Mega представляют положение и ориентацию map block в системе координат camera. И система координат camera, и система координат map block являются правосторонними. Начало системы координат camera находится в оптическом центре камеры, положительное направление оси x направлено вправо, положительное направление оси y направлено вверх, а положительное направление оси z направлено в сторону входа света в камеру (наружу от экрана). (Здесь вправо и вверх на мобильных устройствах означают вправо и вверх в естественной ориентации устройства.) Ось y системы координат map block направлена вверх (противоположно направлению гравитации), а начало определяется данными map block. Данные расположены в порядке row-major, противоположном column-major в OpenGL.