Sistemas de coordenadas de EasyAR
En los programas 3D, la definición de los sistemas de coordenadas es muy importante. Si no se indica lo contrario, se usan las siguientes convenciones.
Todos los vectores son vectores columna.
Todas las matrices usan row-major. (OpenGL usa column-major)
Todos los sistemas de coordenadas usan sistemas de coordenadas de mano derecha. (Coherente con OpenGL)
Si un sistema de coordenadas tiene escala física, la unidad es el metro.
La dirección negativa del eje Y del sistema de coordenadas del mundo es la dirección de la gravedad.
En el sistema de coordenadas del dispositivo, el eje X apunta a la derecha, el eje Y apunta hacia arriba y el eje Z apunta hacia fuera de la pantalla. Para dispositivos cuya pantalla puede rotar, las definiciones de derecha y arriba se basan en su orientación predeterminada. En particular, la orientación predeterminada de Android sigue la definición del sistema. (La colocación horizontal es la orientación predeterminada para gafas y algunas tabletas, y la colocación vertical es la orientación predeterminada para teléfonos y algunas tabletas.) La orientación predeterminada de iOS es vertical. (Coherente con las definiciones de la documentación de IMU de Android e iOS)
Pose para object tracking
La pose del objeto en planar image tracking (ImageTracker) y 3D object tracking (ObjectTracker) se almacena en pose, y representa la pose del target actualmente seguido con respecto a la camera. Tanto el sistema de coordenadas de la camera como el sistema de coordenadas del target son sistemas de mano derecha. El origen del sistema de coordenadas de la camera es el centro óptico de la cámara, la dirección positiva del eje x apunta a la derecha, la dirección positiva del eje y apunta hacia arriba y la dirección positiva del eje z apunta en la dirección en que la luz entra en la cámara (hacia fuera de la pantalla). (Aquí, derecha y arriba se refieren a derecha y arriba en la imagen de la camera, que pueden ser diferentes de la orientación natural del dispositivo.) La disposición de los datos es row-major, opuesta al column-major de OpenGL.
La pose puede escribirse como:
Si el 3D engine usa otras definiciones de ejes de coordenadas, esto debe considerarse al configurar la matriz de transform en el 3D engine. Por ejemplo, cuando las direcciones z del sistema de coordenadas de la camera y del sistema de coordenadas del target son opuestas, el valor de la matriz de transform del nodo target en el 3D engine debe establecerse en:
Transform para motion tracking
transform de surface tracking (SurfaceTracker) y cameraTransform de motion tracking (MotionTrackerCameraDevice), ARKit (ARKitCameraDevice) y ARCore (ARCoreCameraDevice) representan el transform de la camera con respecto al sistema de coordenadas del mundo. Tanto el sistema de coordenadas de la camera como el sistema de coordenadas del mundo son sistemas de mano derecha. El origen del sistema de coordenadas de la camera es el centro óptico de la cámara, la dirección positiva del eje x apunta a la derecha, la dirección positiva del eje y apunta hacia arriba y la dirección positiva del eje z apunta en la dirección en que la luz entra en la cámara (hacia fuera de la pantalla). (Aquí, derecha y arriba en dispositivos móviles se refieren a derecha y arriba en la orientación natural del dispositivo.) El eje y del sistema de coordenadas del mundo apunta hacia arriba (opuesto a la gravedad), y el origen lo determina el sistema de motion tracking. La disposición de los datos es row-major, opuesta al column-major de OpenGL.
Pose en sparse spatial map y Mega
getMapPose de sparse spatial map SparseSpatialMap y pose en Mega representan la posición y orientación del map block en el sistema de coordenadas de la camera. Tanto el sistema de coordenadas de la camera como el sistema de coordenadas del map block son sistemas de mano derecha. El origen del sistema de coordenadas de la camera es el centro óptico de la cámara, la dirección positiva del eje x apunta a la derecha, la dirección positiva del eje y apunta hacia arriba y la dirección positiva del eje z apunta en la dirección en que la luz entra en la cámara (hacia fuera de la pantalla). (Aquí, derecha y arriba en dispositivos móviles se refieren a derecha y arriba en la orientación natural del dispositivo.) El eje y del sistema de coordenadas del map block apunta hacia arriba (opuesto a la gravedad), y el origen lo determinan los datos del map block. La disposición de los datos es row-major, opuesta al column-major de OpenGL.