Table of Contents

Systèmes de coordonnées EasyAR

Dans les programmes 3D, la définition des systèmes de coordonnées est très importante. Sauf indication contraire, les conventions suivantes sont utilisées.

  • Les vecteurs sont des vecteurs colonnes.

  • Les matrices utilisent row-major. (OpenGL utilise column-major)

  • Les systèmes de coordonnées sont des systèmes de coordonnées droitiers. (Cohérent avec OpenGL)

  • Si un système de coordonnées possède une échelle physique, l'unité est le mètre.

  • La direction négative de l'axe Y du système de coordonnées monde est la direction de la gravité.

  • Dans le système de coordonnées de l'appareil, l'axe X pointe vers la droite, l'axe Y vers le haut et l'axe Z vers l'extérieur de l'écran. Pour les appareils dont l'écran peut pivoter, les définitions de droite et haut sont basées sur l'orientation par défaut. En particulier, l'orientation par défaut d'Android suit la définition du système. (Le placement paysage est l'orientation par défaut pour les lunettes et certaines tablettes, tandis que le placement portrait est l'orientation par défaut pour les téléphones et certaines tablettes.) L'orientation par défaut d'iOS est le placement portrait. (Cohérent avec les définitions dans la documentation IMU d'Android et iOS)

Pose pour object tracking

La pose de l'objet dans le planar image tracking (ImageTracker) et le 3D object tracking (ObjectTracker) est stockée dans pose, et représente la pose du target actuellement suivi par rapport à la camera. Le système de coordonnées camera et le système de coordonnées target sont tous deux des systèmes droitiers. L'origine du système de coordonnées camera est le centre optique de la caméra, la direction positive de l'axe x pointe vers la droite, la direction positive de l'axe y vers le haut, et la direction positive de l'axe z dans la direction où la lumière entre dans la caméra (vers l'extérieur de l'écran). (Ici, droite et haut désignent la droite et le haut dans l'image camera, qui peuvent différer de l'orientation naturelle de l'appareil.) L'organisation des données est row-major, à l'opposé du column-major d'OpenGL.

La pose peut s'écrire ainsi:

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

Si le 3D engine utilise d'autres définitions d'axes de coordonnées, il faut en tenir compte lors de la définition de la matrice transform dans le 3D engine. Par exemple, lorsque les directions z du système de coordonnées camera et du système de coordonnées target sont toutes deux inversées, la valeur de la matrice transform du noeud target dans le 3D engine doit être définie comme suit:

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

transform de surface tracking (SurfaceTracker) et cameraTransform de motion tracking (MotionTrackerCameraDevice), ARKit (ARKitCameraDevice) et ARCore (ARCoreCameraDevice) représentent le transform de la camera par rapport au système de coordonnées monde. Le système de coordonnées camera et le système de coordonnées monde sont tous deux des systèmes droitiers. L'origine du système de coordonnées camera est le centre optique de la caméra, la direction positive de l'axe x pointe vers la droite, la direction positive de l'axe y vers le haut, et la direction positive de l'axe z dans la direction où la lumière entre dans la caméra (vers l'extérieur de l'écran). (Ici, droite et haut sur les appareils mobiles désignent la droite et le haut dans l'orientation naturelle de l'appareil.) L'axe y du système de coordonnées monde pointe vers le haut (à l'opposé de la gravité), et l'origine est déterminée par le système de motion tracking. L'organisation des données est row-major, à l'opposé du column-major d'OpenGL.

Pose dans sparse spatial map et Mega

getMapPose de la sparse spatial map SparseSpatialMap et pose dans Mega représentent la position et l'orientation du map block dans le système de coordonnées camera. Le système de coordonnées camera et le système de coordonnées map block sont tous deux des systèmes droitiers. L'origine du système de coordonnées camera est le centre optique de la caméra, la direction positive de l'axe x pointe vers la droite, la direction positive de l'axe y vers le haut, et la direction positive de l'axe z dans la direction où la lumière entre dans la caméra (vers l'extérieur de l'écran). (Ici, droite et haut sur les appareils mobiles désignent la droite et le haut dans l'orientation naturelle de l'appareil.) L'axe y du système de coordonnées map block pointe vers le haut (à l'opposé de la gravité), et l'origine est déterminée par les données map block. L'organisation des données est row-major, à l'opposé du column-major d'OpenGL.