2015-11-13 48 views
1

我试图在增强现实游戏中坚持标记。这里是我正在做的要点:如何在TangoARPoseController中使用ADF来保存标记

我让我的用户录制并保存一个区域到ADF。然后他们将标记放入场景中,并将其位置数据以Unity World坐标保存到文本文件中。然后我重新启动应用程序,加载并定位到ADF并加载标记。

为了得到这个工作,我修改了Unity演示包中的ARPoseController.cs文件,以使用区域描述作为基础框架。在_UpdateTransformation方法我已经换出的帧对

pair.baseFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_START_OF_SERVICE; 
pair.targetFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE; 

pair.baseFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION; 
pair.targetFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE; 

我还添加了一些代码,确认我成功地本地化的ADF,但我注意到我在Unity World Space中的标记位置相对于真实环境的位置不正确。

我可以确认我的标记保存并根据START_OF_SERVICE原点正确加载,因此我假定它们正确地序列化和反序列化。什么可能导致这个?我错误地认为这应该只是通过将基本框架对切换到Area_Description而不是START_OF_SERVICE来工作?

回答

1

我有一个类似的问题得到AR和ADF集成,我不得不修改TangoPointCloud以检查您是否在OnTangoDepthAvailable()中使用AreaDescription并根据需要调整baseFrame目标。

即:

if (m_tangoDeltaPoseController.m_useAreaDescriptionPose) 
{ 
    pair.baseFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION; 
    pair.targetFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE; 
} 
else 
{ 
    pair.baseFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_START_OF_SERVICE; 
    pair.targetFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE; 
} 

这样一来,点云的几何形状调整自身基础上,ADF从设备开始,而不是偏移。

更改后,当我使用AR的示例代码放置标记时,它正确地注册了曲面,因此我将标记放置在正确的点和方向上。尽管如此,我仍然遇到一些不重要的标记,但必须查看AreaLearningInGameController for loop闭包事件。

希望有帮助!