在ArToolkit的android java SDK中找到ArMarker和相机之间的距离

时间:2016-11-08 10:35:42

标签: java android artoolkit

如何计算智能手机相机和artoolkit标记之间的距离。 我试图从标记的变换矩阵中得到它,但矢量值都是零。

float [] pMatrix = ARToolKit.getInstance().getProjectionMatrix();
                float x = pMatrix[3];
                float y = pMatrix[7];
                float z = pMatrix[11];

x,y,z都为零。

1 个答案:

答案 0 :(得分:2)

我认为您正在查看矩阵中的错误位置。摄像机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我相信。 (但不知怎的,我现在无法到达网址)

现在您还在阅读投影矩阵,而不是变换矩阵。 (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