Table of Contents

Sistemas de coordenadas do EasyAR

Em programas 3D, a definição dos sistemas de coordenadas é muito importante. Se não houver indicação especial, as convenções a seguir são usadas.

  • Os vetores são vetores coluna.

  • As matrizes usam row-major. (OpenGL usa column-major)

  • Os sistemas de coordenadas usam sistemas de coordenadas de mão direita. (Consistente com OpenGL)

  • Se um sistema de coordenadas tiver uma escala física, a unidade é metro.

  • A direção negativa do eixo Y do sistema de coordenadas do mundo é a direção da gravidade.

  • No sistema de coordenadas do dispositivo, o eixo X aponta para a direita, o eixo Y aponta para cima e o eixo Z aponta para fora da tela. Para dispositivos cuja tela pode girar, as definições de direita e cima são baseadas na orientação padrão. Em particular, a orientação padrão do Android segue a definição do sistema. (A disposição em paisagem é a orientação padrão para óculos e alguns tablets, e a disposição em retrato é a orientação padrão para telefones e alguns tablets.) A orientação padrão do iOS é retrato. (Consistente com as definições na documentação de IMU do Android e iOS)

Pose para object tracking

A pose do objeto em planar image tracking (ImageTracker) e 3D object tracking (ObjectTracker) é armazenada em pose, e representa a pose do target atualmente rastreado em relação à camera. Tanto o sistema de coordenadas da camera quanto o sistema de coordenadas do target são sistemas de mão direita. A origem do sistema de coordenadas da camera é o centro óptico da câmera, a direção positiva do eixo x aponta para a direita, a direção positiva do eixo y aponta para cima, e a direção positiva do eixo z aponta na direção em que a luz entra na câmera (para fora da tela). (Aqui, direita e cima referem-se à direita e cima na imagem da camera, que podem ser diferentes da orientação natural do dispositivo.) O layout dos dados é row-major, oposto ao column-major do OpenGL.

A pose pode ser escrita como:

\[ 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 o 3D engine usa outras definições de eixos de coordenadas, isso precisa ser considerado ao configurar a matriz transform no 3D engine. Por exemplo, quando as direções z do sistema de coordenadas da camera e do sistema de coordenadas do target são ambas opostas, o valor da matriz transform do nó target no 3D engine deve ser definido como:

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

transform de surface tracking (SurfaceTracker) e cameraTransform de motion tracking (MotionTrackerCameraDevice), ARKit (ARKitCameraDevice) e ARCore (ARCoreCameraDevice) representam o transform da camera em relação ao sistema de coordenadas do mundo. Tanto o sistema de coordenadas da camera quanto o sistema de coordenadas do mundo são sistemas de mão direita. A origem do sistema de coordenadas da camera é o centro óptico da câmera, a direção positiva do eixo x aponta para a direita, a direção positiva do eixo y aponta para cima, e a direção positiva do eixo z aponta na direção em que a luz entra na câmera (para fora da tela). (Aqui, direita e cima em dispositivos móveis referem-se à direita e cima na orientação natural do dispositivo.) O eixo y do sistema de coordenadas do mundo aponta para cima (oposto à gravidade), e a origem é determinada pelo sistema de motion tracking. O layout dos dados é row-major, oposto ao column-major do OpenGL.

Pose em sparse spatial maps e Mega

getMapPose do sparse spatial map SparseSpatialMap e pose no Mega representam a posição e orientação do map block no sistema de coordenadas da camera. Tanto o sistema de coordenadas da camera quanto o sistema de coordenadas do map block são sistemas de mão direita. A origem do sistema de coordenadas da camera é o centro óptico da câmera, a direção positiva do eixo x aponta para a direita, a direção positiva do eixo y aponta para cima, e a direção positiva do eixo z aponta na direção em que a luz entra na câmera (para fora da tela). (Aqui, direita e cima em dispositivos móveis referem-se à direita e cima na orientação natural do dispositivo.) O eixo y do sistema de coordenadas do map block aponta para cima (oposto à gravidade), e a origem é determinada pelos dados do map block. O layout dos dados é row-major, oposto ao column-major do OpenGL.