ARCore:分解视图矩阵

时间:2017-12-05 07:50:14

标签: matrix arcore

我正试图从姿势的视图矩阵中获取眼睛坐标(相机的位置,方向和向上),但我得到的并不是我所期望的。

  1. 首先,我的目标是Yup坐标系:Y-up coordinate frame
  2. 我不确定ARCore是否使用相同的系统,我没有找到关于使用的坐标系的精确信息。

    1. 接下来,我正在分解视图矩阵,但如果结果在数学上是好的(方向和向上似乎在好的方向,位置似乎具有良好的比例),结果是非常cahotic,因为我的相机在我的场景中奇怪地移动。

              // 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();
      
    2. 对你来说听起来有点奇怪吗?

1 个答案:

答案 0 :(得分:0)

以下是答案: 我使用的设备/配置是横向模式,因此坐标框架不是这个。

这是我的修复:

 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();
 }