在Google Samples上,我可以获取有关从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的Format和NumberOfPlanes可以。
ScopedArPose
类与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;
}