如何使用Tango和Unity从屏幕空间获取深度点

时间:2016-12-21 02:36:31

标签: c# unity3d google-project-tango

我希望使用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,它只是迭代点云中的每个点,这不是一个可用的解决方案。

1 个答案:

答案 0 :(得分:0)

目前,Unity不提供FindClosestPoint。最接近的替换是PointCloud预制中的FindPlane函数。请参阅函数here