ARCore: разложить матрицу представления

Я пытаюсь получить координаты глаз (положение камеры, направление и вверх) из матрицы вида позы, но получаю не то, что ожидал.

  1. Во-первых, моя цель - система координат Yup: Система координат Y-вверх

Я не уверен, что ARCore использует ту же систему, я не нашел точной информации об используемой системе координат.

  1. Затем я разлагаю матрицу вида, но если результаты математически хороши (направление и вверх кажутся правильными, позиция имеет хороший масштаб), результат очень каготичен, поскольку моя камера странно перемещается по моей сцене. .

            // Get camera matrix and draw.
            float[] viewmtx = new float[16];
            frame.getViewMatrix(viewmtx, 0);
    
    
            Vector3 pos = new Vector3(viewmtx[12], viewmtx[13], viewmtx[14]);
            Vector3 camDir = new Vector3(viewmtx[8], viewmtx[9], viewmtx[10]).nor().scl(-1);
            Vector3 camUp = new Vector3(viewmtx[4], viewmtx[5], viewmtx[6]).nor();
    

Что-то звучит странно для вас?


person Vince    schedule 05.12.2017    source источник


Ответы (1)


Вот ответ: Устройство / конфигурация, которые я использую, находятся в ландшафтном режиме, поэтому координатная рамка не та.

Вот мое исправление:

 Vector3 pos = new Vector3(viewmtx[12], viewmtx[13], viewmtx[14]).scl(1000);
 Vector3 camDir = new Vector3(viewmtx[8], viewmtx[9], viewmtx[10]).nor();
 Vector3 camUp = new Vector3(viewmtx[4], viewmtx[5], viewmtx[6]).nor();
 if (isLandscape) {
     pos = new Vector3(viewmtx[12], viewmtx[13], viewmtx[14]).scl(1000);
     camDir = new Vector3(-viewmtx[8], -viewmtx[9], -viewmtx[10]).nor();
     camUp = new Vector3(viewmtx[0], viewmtx[1], viewmtx[2]).nor();
 }
person Vince    schedule 12.02.2018