我希望使用Unity Tango集成中的点云在视口中心找到世界空间中的一个点。然后我会在那里放置一个“十字线”类型的GameObject。
我的代码基于C API examples中的point_to_point示例。
TangoSupport_getDepthAtPointNearestNeighbor
是能够满足我需要的功能,但它需要一个姿势参数。
C API说这是:
The pose of the point cloud relative to the color camera used to obtain uv_coordinates.
Unity API说这是:
Transformation matrix of the color camera with respect to the Unity World frame.
point_to_point示例调用:
TangoSupport_calculateRelativePose(
color_image_timestamp, TANGO_COORDINATE_FRAME_CAMERA_COLOR,
point_cloud->timestamp, TANGO_COORDINATE_FRAME_CAMERA_DEPTH,
&pose_color_camera_T_depth_camera);
找到姿势。
但这在Unity集成中不存在。我试过像这样手动添加它:
internal const string TANGO_SUPPORT_UNITY_DLL = "tango_support_api";
[DllImport(TANGO_SUPPORT_UNITY_DLL)]
private static extern int TangoSupport_calculateRelativePose(
double base_timestamp, TangoEnums.TangoCoordinateFrameType base_frame,
double target_timestamp, TangoEnums.TangoCoordinateFrameType target_frame,
out TangoPoseData base_frame_T_target_frame);
并且这样称呼它:
TangoPoseData poseData = new TangoPosedata();
TangoSupport_calculateRelativePose(
pointCloudData.m_timestamp,
TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_CAMERA_COLOR,
pointCloudData.m_timestamp,
TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_CAMERA_DEPTH,
out poseData
);
但是当我给它打电话时,这给了我一个空参考。我采取了正确的方法吗? Unity集成附带的tango_support_api库中是否存在TangoSupport_calculateRelativePose
?
Unity包中有一个point_to_point示例。但是使用C#函数FindClosestPoint
,它只是迭代点云中的每个点,这不是一个可用的解决方案。