如何从 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
可以,我可以得到 ArCamera
,ArCameraIntrinsics
可以,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;
}
在 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
可以,我可以得到 ArCamera
,ArCameraIntrinsics
可以,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;
}