2016-12-21 1 views
0

Unity Tangoインテグレーションのポイントクラウドを使用して、ビューポートの中央のワールドスペース内のポイントを探したいとします。そこに「レチクル」タイプのゲームオブジェクトを配置します。TangoとUnityを使用してスクリーンスペースから深度ポイントを取得する方法

C API examplesのpoint_to_pointの例からコードを外しています。

TangoSupport_getDepthAtPointNearestNeighborは、私が必要とするものを行う機能ですが、poseパラメータが必要です。ユニティAPIはこれがあると言う

The pose of the point cloud relative to the color camera used to obtain uv_coordinates. 

C 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 
); 

しかし、私はそれを呼び出すときに、これは私にはnull参照を与えます。私は正しいアプローチをしていますか? Unityインテグレーションに同梱されているtango_support_apiライブラリにTangoSupport_calculateRelativePoseが存在しますか?

Unityパッケージにpoint_to_pointの例があります。しかし、C#関数FindClosestPointを使用します。これはポイントクラウド内のすべての点を反復処理するだけであり、使用可能な解決策ではありません。

答えて

0

現在、FindClosestPointはUnityを通じて利用できません。最も近い置換は、PointCloudプレハブのFindPlane関数です。機能hereを参照してください。

+0

ソースのコメントは正確ですか? 「この機能は、ポイントクラウド内のすべての単一点を見るので、遅いです。 [FitPlaneModelNearClick](https://developers.google.com/tango/apis/java/support/reference/TangoSupport.html#fitPlaneModelNearPoint-TangoPointCloudData-TangoPoseData-float-float-)のドキュメントとは異なります。 'FindClosestPoint'は明示的にすべての点をループします。 –

+0

正しいです。 Unityの 'FindClosestPoint'関数はすべての点をループします。しかし、UnityのFindPlane関数は、C Support Libraryの 'FitPlaneModelNearClick'を呼び出します。 –

+0

私は、 'FitPlaneModelNearClick'関数も同じコメントを持つことを意味しました。 'FitPlaneModelNearClick'を呼び出すときに実際に遅いのか、そのコメントがコピー/ペーストエラーであるのかどうか疑問に思っていましたか? –

関連する問題