[英]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.