При использовании этой функции в 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 ...
так как столбец майор.
Как мне узнать правильный формат?
Заказ комплектующих в ARCore *out_matrix_col_major_4x4
такой же, как в OpenGL Matrix:
ARCore документация говорит об этом явно:
out_matrix_col_major_4x4
является указателем на массив из 16 чисел с плавающей запятой, который должен быть заполнен матрицей однородного преобразования по главному столбцу, как используется OpenGL.
Первые три элемента в крайний правый столбец [0,0,0,1] для перевода по x
,y
,z
ось:
Первые три элемента в нижний ряд [0,0,0,1] в этой матрице 4×4 предназначены для аффинного отображения. Итак, последняя строка матрицы 4×4 должна соблюдаться при применении преобразований после проекции.
Срок Колонка-майор означает: элементы этой матрицы можно получить и установить с помощью порядок столбцов. Таким образом, перевести
x
,y
,z
элементы расположены в крайнем правом четвертом столбце.
Других решений пока нет …