Table of Contents

Системы координат 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) можно записать как:

\[ P = \left( \begin{array}{cccc} p_{11} & p_{12} & p_{13} & p_{14} \\ p_{21} & p_{22} & p_{23} & p_{24} \\ p_{31} & p_{32} & p_{33} & p_{34} \\ 0 & 0 & 0 & 1 \\ \end{array} \right) \]

Если 3D-движок использует другое определение осей, при установке матрицы преобразования в 3D-движке необходимо это учесть. Например, если в системах координат камеры и цели направление оси Z противоположно, то матрица преобразования для узла цели в 3D-движке должна быть установлена как:

\[ \left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array} \right)\left( \begin{array}{cccc} p_{11} & p_{12} & p_{13} & p_{14} \\ p_{21} & p_{22} & p_{23} & p_{24} \\ p_{31} & p_{32} & p_{33} & p_{34} \\ 0 & 0 & 0 & 1 \\ \end{array} \right)\left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array} \right)=\left( \begin{array}{cccc} p_{11} & p_{12} & -p_{13} & p_{14} \\ p_{21} & p_{22} & -p_{23} & p_{24} \\ -p_{31} & -p_{32} & p_{33} & -p_{34} \\ 0 & 0 & 0 & 1 \\ \end{array} \right) \]

Преобразование (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.