ARCore NDK Pose的Matrix4x4格式是什么?

时间:2018-10-11 15:59:07

标签: c++ matrix android-ndk augmented-reality arcore

NDK 中使用此功能时:

void ArPose_getMatrix(
    const ArSession *session,
    const ArPose *pose,
    float *out_matrix_col_major_4x4
)

我得到一个Pointer to an array of 16 floats, to be filled with a column-major homogenous transformation matrix, as used by OpenGL.

但是我不知道这个矩阵是否是:

x.x, x.y, x.z, 0
y.x, y.y, y.z, 0
z.x, z.y, z.z, 0
t.x, t.y, t.z, 1

x.x, x.y, x.z, x.t
y.x, y.y, y.z, y.t
z.x, z.y, z.z, z.t
  0,   0,   0,   1

我只知道读顺序:x.x, y.x, z.x ...,因为它是专栏文章。

我怎么知道正确的格式?

1 个答案:

答案 0 :(得分:1)

ARCore *out_matrix_col_major_4x4中组件的顺序与OpenGL Matrices中的顺序相同:

ARCore文档says about it obviously

  

out_matrix_col_major_4x4是指向16个浮点数的数组的指针,将由OpenGL使用的,以列为主的均匀变换矩阵填充。

enter image description here

最右列中的前三个元素[0,0,0,1]用于沿xyz轴平移:

enter image description here

此4x4矩阵最低行 [0,0,0,1]中的前三个元素用于仿射映射。因此,在投影后应用转换时,必须注意4x4矩阵的最后一行。

  

术语主要列的意思是:此矩阵的元素可以使用列的顺序获取和设置。因此,翻译xyz元素位于最右边的第四列。