Sistema di coordinate di easyar
Nei programmi 3D, la definizione del sistema di coordinate è molto importante. Se non diversamente specificato, si applicano le seguenti convenzioni.
I vettori sono tutti vettori colonna.
Le matrici sono tutte row-major. (OpenGL è column-major)
Tutti i sistemi di coordinate utilizzano un sistema destrorso. (Coerente con OpenGL)
Se esiste una scala fisica nel sistema di coordinate, l'unità di misura è il metro.
L'asse Y negativo del sistema di coordinate mondiale è la direzione gravitazionale.
Nel sistema di coordinate del dispositivo, l'asse X punta a destra, l'asse Y punta verso l'alto e l'asse Z è rivolto verso l'esterno dello schermo; per dispositivi con schermo rotabile, destra e alto sono definiti in base alla loro orientazione predefinita. In particolare, l'orientazione predefinita di Android segue la definizione del sistema. (Gli occhiali e alcuni tablet in orizzontale sono l'orientazione predefinita, i telefoni e alcuni tablet in verticale sono l'orientazione predefinita). L'orientazione predefinita di iOS è verticale. (Coerente con le definizioni nella documentazione IMU di Android e iOS)
Pose per il tracciamento degli oggetti
La pose dell'oggetto per il tracciamento di immagini piane (ImageTracker) e il tracciamento di oggetti 3D (ObjectTracker) è memorizzata in pose, e rappresenta la posa del target attualmente tracciato rispetto alla camera. Sia il sistema di coordinate della camera che quello del target sono sistemi destrorsi. L'origine del sistema di coordinate della camera è il centro ottico, l'asse X positivo punta a destra, l'asse Y positivo punta verso l'alto e l'asse Z positivo punta nella direzione della luce che entra nella camera (fuori dallo schermo). (Destra e alto si riferiscono alla destra e all'alto nell'immagine della camera, che potrebbero differire dall'orientazione naturale del dispositivo.) I dati sono disposti in row-major, l'opposto di column-major di OpenGL.
La pose può essere scritta come:
Se il motore 3D utilizza una diversa definizione degli assi, occorre considerarlo quando si imposta la matrice di trasformazione nel motore 3D. Ad esempio, se gli assi Z del sistema di coordinate della camera e del target sono entrambi invertiti, la matrice di trasformazione del nodo target nel motore 3D dovrebbe essere impostata come:
Trasformazione per il tracciamento del movimento
transform del tracciamento di superficie (SurfaceTracker) e cameraTransform del tracciamento del movimento (MotionTrackerCameraDevice), di ARKit (ARKitCameraDevice), e di ARCore (ARCoreCameraDevice), rappresentano la trasformazione della camera rispetto al sistema di coordinate mondiale. Sia il sistema di coordinate della camera che quello mondiale sono sistemi destrorsi. L'origine del sistema di coordinate della camera è il centro ottico, l'asse X positivo punta a destra, l'asse Y positivo punta verso l'alto e l'asse Z positivo punta nella direzione della luce che entra nella camera (fuori dallo schermo). (Destra e alto, sui dispositivi mobili, si riferiscono a destra e alto nell'orientazione naturale del dispositivo.) L'asse Y positivo del sistema di coordinate mondiale punta verso l'alto (opposto alla direzione gravitazionale), l'origine è determinata dal sistema di tracciamento del movimento. I dati sono disposti in row-major, l'opposto di column-major di OpenGL.
Pose nelle mappe spaziali sparse e in mega
getMapPose della mappa spaziale sparsa (SparseSpatialMap) e pose in mega, rappresentano la posizione e l'orientamento del blocco della mappa nel sistema di coordinate della camera. Sia il sistema di coordinate della camera che quello del blocco della mappa sono sistemi destrorsi. L'origine del sistema di coordinate della camera è il centro ottico, l'asse X positivo punta a destra, l'asse Y positivo punta verso l'alto e l'asse Z positivo punta nella direzione della luce che entra nella camera (fuori dallo schermo). (Destra e alto, sui dispositivi mobili, si riferiscono a destra e alto nell'orientazione naturale del dispositivo.) L'asse Y positivo del sistema di coordinate del blocco della mappa punta verso l'alto (opposto alla direzione gravitazionale), l'origine è determinata dai dati del blocco della mappa. I dati sono disposti in row-major, l'opposto di column-major di OpenGL.