簡體   English   中英

使用帶有Unity的Google Tango獲取OpenGL坐標系的姿勢數據

[英]Getting pose data for OpenGL Coordinate System using Google Tango with Unity

我在Tango中使用Unity,但是在獲取姿勢數據時遇到問題。 帶有Tango Unity SDK的Unity應用程序是為Android設備構建的,設備獲取姿勢數據並將其發送到計算機,然后使用OpenGL完成其他處理。 我的問題是,由於無法像使用C API那樣定義引擎,因此在哪個坐標系中返回姿態數據? Unity會像這樣獲取姿勢數據,並且無法發送其他任何信息:

#if UNITY_EDITOR
        GetEmulatedPoseAtTime(poseData, timeStamp, framePair);
#else // ANDROID
        int returnValue = API.TangoService_getPoseAtTime(timeStamp, framePair, poseData);
        if (returnValue != Common.ErrorType.TANGO_SUCCESS)
        {
            Debug.Log(CLASS_NAME + ".GetPoseAtTime() Could not get pose at time : " + timeStamp);
        }
 #endif

只是為了證明我的OpenGL應用程序可以正常工作,我使用具有相同想法(獲取姿勢數據並將其發送)的C API創建了Tango項目:

    TangoCoordinateFramePair pair;
    pair.base = TANGO_COORDINATE_FRAME_START_OF_SERVICE;
    pair.target = TANGO_COORDINATE_FRAME_DEVICE;

    base = TANGO_SUPPORT_ENGINE_OPENGL;
    target = TANGO_SUPPORT_ENGINE_OPENGL;

    error = TangoSupport_getPoseAtTime(poseTimestamp, pair.base, pair.target, base, target, ROTATION_0, &pose);

...,這有效。

我以為數據可能在Tango坐標系中,因此我嘗試在此處將具有C#等效功能的位姿數據轉換為QuatTangoToGl和Vec3GlToTango形式,但仍然不正確。

那么,Unity SDK中的姿態數據位於哪個坐標系中,是否可以通過某種方式定義我想要的引擎?

我意識到我可以在TangoSupport中公開函數TangoSupport_getPoseAtTime並添加枚舉EngineType和RotationType(值與C API匹配)。

因此,我在TangoSupportAPI下的TangoSupport.cs中添加了此代碼:

[DllImport(TANGO_SUPPORT_UNITY_DLL)]
public static extern int TangoSupport_getPoseAtTime(
            double timestamp, TangoEnums.TangoCoordinateFrameType baseFrame, TangoEnums.TangoCoordinateFrameType targetFrame,
            Common.EngineType baseEngine, Common.EngineType targetEngine, Common.RotationType rotation, [In, Out] TangoPoseData pose);

並在TangoSupport類中添加了適當的功能。 現在,我得到了在OpenGL項目中正確設置的姿勢。

沒有定義引擎類型,給定的poseData用於探戈坐標系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM