Найти расстояние между ArMarker и камерой в Android-пакете ArToolkit для Android
Как рассчитать расстояние между камерой смартфона и маркером artoolkit. я пытался получить его из матрицы преобразования маркера, но все значения вектора равны нулю.
float [] pMatrix = ARToolKit.getInstance().getProjectionMatrix();
float x = pMatrix[3];
float y = pMatrix[7];
float z = pMatrix[11];
x, y, z - все ноль.
1 ответ
Я думаю, что вы смотрите на неправильные позиции в матрице. Камера x,y,z находится внутри последнего столбца матрицы преобразования:
queryMarkerTransformation(int markerId);
Returns float array with 16 values. The values represent an OpenGL style transformation matrix.
The first 4 values represent the first column of the matrix.
i.e:
float[16] = [0.24218401, 0.9598883, 0.14125957, 0.0, -0.8614648, 0.2801126, -0.42357886, 0.0, -0.44614935, -0.019116696, 0.8947546, 0.0, 23.678268, -6.4265084, -298.65326, 1.0]
The matrix looks like:
0.24218401 -0.8614648 -0.44614935 23.678268
0.9598883 0.2801126 -0.019116696 -6.4265084
0.14125957 -0.42357886 0.8947546 -298.65326
0.0 0.0 0.0 1.0
The last column represents x,y,z in the camera coordinate system.
Источник для этого здесь: https://www.hitl.washington.edu/artoolkit/documentation/tutorialcamera.htm Я полагаю. (Но почему-то я не могу достичь URL прямо сейчас)
Теперь вы также читаете матрицу проекции, а не матрицу преобразования. ( https://github.com/artoolkit/artoolkit5/blob/master/AndroidStudioProjects/ARSimpleProj/aRSimple/src/main/java/org/artoolkit/ar/samples/ARSimple/SimpleRenderer.java#L98)
Если я отследил это правильно, значение [14] должно дать вам расстояние до маркера.
Обновление: я только что записал более подробное объяснение здесь: http://augmentmy.world/artoolkit-distance-between-camera-and-marker