Table of Contents

Sistemi di coordinate EasyAR

Nei programmi 3D, la definizione dei sistemi di coordinate è molto importante. Salvo diversa indicazione, vengono usate le seguenti convenzioni.

  • I vettori sono vettori colonna.

  • Le matrici usano row-major. (OpenGL usa column-major)

  • I sistemi di coordinate sono sistemi di coordinate destrorsi. (Coerente con OpenGL)

  • Se un sistema di coordinate ha una scala fisica, l'unità è il metro.

  • La direzione negativa dell'asse Y del sistema di coordinate mondo è la direzione della gravità.

  • Nel sistema di coordinate del dispositivo, l'asse X punta a destra, l'asse Y punta verso l'alto e l'asse Z punta fuori dallo schermo. Per i dispositivi il cui schermo può ruotare, le definizioni di destra e alto si basano sull'orientamento predefinito. In particolare, l'orientamento predefinito di Android segue la definizione del sistema. (La disposizione landscape è l'orientamento predefinito per occhiali e alcuni tablet, mentre la disposizione portrait è l'orientamento predefinito per telefoni e alcuni tablet.) L'orientamento predefinito di iOS è portrait. (Coerente con le definizioni nella documentazione IMU di Android e iOS)

Pose per object tracking

La pose dell'oggetto nel planar image tracking (ImageTracker) e nel 3D object tracking (ObjectTracker) è memorizzata in pose e rappresenta la posa del target attualmente tracciato rispetto alla camera. Sia il sistema di coordinate camera sia il sistema di coordinate target sono sistemi di coordinate destrorsi. L'origine del sistema di coordinate camera è il centro ottico della camera, la direzione positiva dell'asse x punta a destra, la direzione positiva dell'asse y punta verso l'alto e la direzione positiva dell'asse z punta nella direzione in cui la luce entra nella camera (fuori dallo schermo). (Qui destra e alto indicano destra e alto nell'immagine della camera, che possono differire dall'orientamento naturale del dispositivo.) La disposizione dei dati è row-major, opposta al column-major di OpenGL.

La pose può essere scritta come:

\[ 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) \]

Se il 3D engine usa altre definizioni degli assi di coordinate, ciò deve essere considerato quando si imposta la matrice transform nel 3D engine. Ad esempio, quando le direzioni z del sistema di coordinate camera e del sistema di coordinate target sono entrambe opposte, il valore della matrice transform del nodo target nel 3D engine deve essere impostato su:

\[ \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 per motion tracking

transform di surface tracking (SurfaceTracker) e cameraTransform di motion tracking (MotionTrackerCameraDevice), ARKit (ARKitCameraDevice) e ARCore (ARCoreCameraDevice) rappresentano il transform della camera rispetto al sistema di coordinate mondo. Sia il sistema di coordinate camera sia il sistema di coordinate mondo sono sistemi di coordinate destrorsi. L'origine del sistema di coordinate camera è il centro ottico della camera, la direzione positiva dell'asse x punta a destra, la direzione positiva dell'asse y punta verso l'alto e la direzione positiva dell'asse z punta nella direzione in cui la luce entra nella camera (fuori dallo schermo). (Qui destra e alto sui dispositivi mobili indicano destra e alto nell'orientamento naturale del dispositivo.) L'asse y del sistema di coordinate mondo punta verso l'alto (opposto alla gravità), e l'origine è determinata dal sistema di motion tracking. La disposizione dei dati è row-major, opposta al column-major di OpenGL.

Pose in sparse spatial map e Mega

getMapPose della sparse spatial map SparseSpatialMap e pose in Mega rappresentano la posizione e l'orientamento del map block nel sistema di coordinate camera. Sia il sistema di coordinate camera sia il sistema di coordinate map block sono sistemi di coordinate destrorsi. L'origine del sistema di coordinate camera è il centro ottico della camera, la direzione positiva dell'asse x punta a destra, la direzione positiva dell'asse y punta verso l'alto e la direzione positiva dell'asse z punta nella direzione in cui la luce entra nella camera (fuori dallo schermo). (Qui destra e alto sui dispositivi mobili indicano destra e alto nell'orientamento naturale del dispositivo.) L'asse y del sistema di coordinate map block punta verso l'alto (opposto alla gravità), e l'origine è determinata dai dati map block. La disposizione dei dati è row-major, opposta al column-major di OpenGL.