Системы координат EasyAR
В 3D-программах определение систем координат крайне важно. Если не указано иное, действуют следующие соглашения.
- Векторы являются векторами-столбцами.
- Матрицы хранятся в row-major порядке. (OpenGL использует column-major)
- Системы координат являются правыми. (Совпадает с OpenGL)
- Если в системе координат присутствует физическая шкала, единицей измерения является метр.
- В мировой системе координат ось Y направлена в сторону, противоположную силе тяжести.
- В системе координат устройства ось X направлена вправо, ось Y — вверх, ось Z — из экрана наружу; для устройств с поворотом экрана направления "вправо" и "вверх" определяются по ориентации по умолчанию. В частности, ориентация по умолчанию для Android определяется системой (очки и некоторые планшеты имеют альбомную ориентацию по умолчанию, телефоны и некоторые планшеты — портретную), для iOS ориентация по умолчанию — портретная. (Совпадает с определением в описании IMU для Android и iOS)
Положение (pose) отслеживаемого объекта
Положение (pose) объекта для отслеживания плоских изображений (ImageTracker) и 3D-объектов (ObjectTracker) хранится в pose и представляет положение отслеживаемой цели (target) относительно камеры. Системы координат камеры и цели являются правыми. Начало системы координат камеры находится в оптическом центре камеры, положительное направление оси X — вправо, оси Y — вверх, оси Z — по направлению лучей, входящих в камеру (из экрана). (Направления "вправо" и "вверх" соответствуют изображению с камеры и могут отличаться от естественной ориентации устройства.) Данные представлены в row-major порядке, что противоположно column-major в OpenGL.
Положение (pose) можно записать как:
Если 3D-движок использует другое определение осей, при установке матрицы преобразования в 3D-движке необходимо это учесть. Например, если в системах координат камеры и цели направление оси Z противоположно, то матрица преобразования для узла цели в 3D-движке должна быть установлена как:
Преобразование (transform) при отслеживании движения
transform для трекера поверхностей (SurfaceTracker) и cameraTransform для трекера движения (MotionTrackerCameraDevice), ARKit (ARKitCameraDevice), ARCore (ARCoreCameraDevice) представляют преобразование камеры относительно мировой системы координат. Системы координат камеры и мира являются правыми. Начало системы координат камеры находится в оптическом центре камеры, положительное направление оси X — вправо, оси Y — вверх, оси Z — по направлению лучей, входящих в камеру (из экрана). (Направления "вправо" и "вверх" на мобильных устройствах соответствуют естественной ориентации устройства.) В мировой системе координат ось Y направлена вверх (противоположно силе тяжести), начало координат определяется системой отслеживания движения. Данные представлены в row-major порядке, что противоположно column-major в OpenGL.
Положение (pose) в разреженных пространственных картах и в Mega
getMapPose для разреженных пространственных карт (SparseSpatialMap) и pose в Mega представляют положение и ориентацию блока карты (map block) в системе координат камеры. Системы координат камеры и блока карты являются правыми. Начало системы координат камеры находится в оптическом центре камеры, положительное направление оси X — вправо, оси Y — вверх, оси Z — по направлению лучей, входящих в камеру (из экрана). (Направления "вправо" и "вверх" на мобильных устройствах соответствуют естественной ориентации устройства.) В системе координат блока карты ось Y направлена вверх (противоположно силе тяжести), начало координат определяется данными блока карты. Данные представлены в row-major порядке, что противоположно column-major в OpenGL.