如何从 ARCore NDK 中的 ArCamera Pose 获取 Matrix4x4?

How get Matrix4x4 from Pose from ArCamera in ARCore NDK?

在 Google Samples 我可以得到关于从一个 Pose 生成 Matrix 的示例ArAnchor 或来自 ArPlane。但是当我试图从 ArCamera 获取时不起作用,我的结果是 Identity Matrix.

我的代码中的一小部分:

ScopedArPose scopedArPose(ar_session_);
ArCamera_getPose(ar_session_, ar_camera, scopedArPose.GetArPose());
std::array<float, 16> out_matrix_col_major_4x4;

ArPose_getMatrix(ar_session_, scopedArPose.GetArPose(), out_matrix_col_major_4x4.data());

什么是有效的:

ArSession 正常,ArFrame 可以,我可以得到 ArCameraArCameraIntrinsics 可以,ArImage 可以,AImage没问题。

Image 中的格式和 NumberOfPlanes 都可以。

ScopedArPose class 等于 google 个样本。 array<float, 16> 工作正常,在 google 个样本中测试。

缺少什么?

为了解决这个问题之前需要检查相机状态。

ArTrackingState camera_tracking_state;
ArCamera_getTrackingState(ar_session_, ar_camera, &camera_tracking_state);
// If the camera isn't tracking don't bother to go forward
if (camera_tracking_state != AR_TRACKING_STATE_TRACKING) {
    LOGI("ARCoreOdometry: Camera Not Tracking");
    return;
}