【问题标题】:Stop Tracking images停止跟踪图像
【发布时间】:2016-09-28 21:47:10
【问题描述】:

Vuforia 可能会在检测到您的 BBDD 的图像后停止尝试查找更多图像,将 3D 对象保持在最后检测到的位置固定,并且您可以在扩展跟踪模式下围绕对象 3D 移动相机?

谢谢

【问题讨论】:

  • 看起来这是一个副本:stackoverflow.com/questions/17087725/how-to-make-vuforia-stop-tracking-in-unity
  • 如果使用此代码 TrackerManager.Instance.GetTracker().Stop(); visual studio 找不到 ImageTracker 的定义,并且与此 TrackerManager.Instance.GetTracker(Tracker.Type.IMAGE_TRACKER).Stop(); 相同视觉没有包含类型的定义谢谢

标签: unity3d vuforia


【解决方案1】:

可以根据需要停止跟踪,并将 3D 对象固定在屏幕上/视口的最后一个 2D 位置。但是扩展跟踪仍然是跟踪,因此一旦禁用跟踪,您就不能将 3D 对象固定在在 3D 空间中的最后一个位置,因为这就是跟踪的目的! :) 如果您想使用其他方式继续跟踪(您提到陀螺仪),这不是一个简单的问题。

要禁用相机的跟踪,但保留相机源,您可以使用以下内容:

Tracker imageTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
if (imageTracker != null)
    imageTracker.Stop();

将上面的代码放在DefaultTrackableEventHandlerOnTrackingFound() 函数中是没有意义的(如果你正在使用它,否则你的等价物),因为通常会在相机边缘检测到可跟踪图像,因此如果您立即禁用跟踪,则对象将卡在视口边缘的某个位置。因此,您可能会使用计时器,或者最好让用户按下 UI 按钮来“冻结”对象。

您还需要更改 DefaultTrackableEventHandler 中的 OnTrackingLost() 函数,以便在停止跟踪时“丢失”跟踪时不再禁用 3D 对象的网格渲染器,否则对象会消失。

为什么不切换到不是 AR 的 3D 模式,而是可以在移动屏幕上用手指或鼠标或键盘操作对象?换言之,禁用 Vuforia,但在屏幕上保持“检测到”的 3D 对象处于活动状态。然后,您可以完全禁用 Vuforia,而不是像上面的代码那样禁用 ObjectTracker:

VuforiaBehaviour.Instance.enabled = false;

在禁用 Vuforia 时,一旦“丢失”跟踪,您仍需要编辑 OnTrackingLost()(或等效项)以不再禁用 3D 对象。

【讨论】:

  • 我看到我想做的事情很复杂。我正在创建一个应用程序来检测图像并将字符放置在它们附近,为此使用扩展跟踪,这在理论上使得一旦图像丢失,字符就会在空间中持续存在。在实践中,当手机摄像头移动时,角色通常会无缘无故地消失,尽管移动速度很慢,这对我来说没有意义。我一开始评论的,是我想到的第一件事来解决它,但如果你知道其他解决方法,我很乐意听:)
  • 如果我已经回答了您的问题,请接受我的回答。我刚刚测试了扩展跟踪的质量,它对我来说效果很好,即使是 3 星目标图像。如果我缓慢移动相机,我可以将相机移动/旋转远离目标而不会“丢失”它。然后 3D 模型会有一些不可避免的漂移,但这是意料之中的。如果您的跟踪效果不佳,请检查您的目标图像是否适合跟踪/在 Vuforia 的目标管理器中获得 5 星。 Q:如果相机看不到目标图像,为什么要保留角色?
  • 要考虑的另一件事是扩展跟踪的工作原理。相机检测它看到的图像帧中的特征,检查这些特征是如何改变/移动的,并估计它自己的运动。因此,如果您的目标图像是例如在没有其他显着特征的普通桌子上,相机无法计算出自己的相对运动。因此,当相机看不到目标图像时,为了改善扩展跟踪,背景/相机看到的其他东西必须是“忙碌的”/具有可以跟踪的其他功能,像普通的桌子这样的东西就不能很好地工作。
  • 我希望玩家可以与角色互动并与他对话。如果手机暂时失去了角色,这对我来说是一个很大的问题。抱歉没有检查答案,我是论坛的新手。它是一组检测率在三到四星的图像,有时字符会无缘无故地闪烁
  • 你能解释一下为什么如果暂时丢失跟踪是个大问题吗?是否不可能,例如:1. 保留一个变量来说明对话是否已经开始,2. 保留另一个变量来说明对话是否暂停/在哪里暂停。然后当你找到目标时,如果对话已经开始的变量还没有设置为true,则将其设置为true。如果是真的,但对话已暂停,请继续对话。当您失去跟踪时,暂停对话。然后对话只在你跟踪目标时发生,当你不在时就暂停。
【解决方案2】:

听起来你想要完成的事情类似于Dead Reckoning

我们无法真正使用移动设备进行正确的航位推算(假设您正在运行 Vuforia)是因为内部传感器几乎不够准确,无法在这一帧和最后一帧之间保持正确的位置框架。 Unity 可能认为你在左边几英寸,而实际上你更远。这将产生非常沉重的漂移效果,并且可能会一起消除模拟的“魔幻”感觉。像 Google Tango 这样的东西在这类事情上要好得多,尽管它们依赖于环境识别,而不是目标识别。 Tangos 可以每帧接收新的环境数据,使其更加稳定。

由于(大多数)移动设备没有深度传感器或类似的东西,Vuforia 依靠图像目标作为将对象锚定在场景中的一种方式,使其每帧都不断更新位置。这样,它就不必依赖加速度计数据之类的任何东西来进行补偿。

可以禁用跟踪,但它会这样做,禁用跟踪并让您的对象漂浮在虚拟深渊中(如果您设法覆盖 vuforia 的渲染器操作)。

简而言之,Vuforia 需要图像目标才能正确跟踪,从而消除“最后已知位置”技术的可能性。

【讨论】:

  • 我尝试使用此代码禁用 TrackerManager.Instance.GetTracker().Stop();但是 Visual Studio 找不到 ImageTracker 的定义,并且与此 TrackerManager.Instance.GetTracker(Tracker.Type.IMAGE_TRACKE‌​R).Stop(); 相同视觉没有包含类型的定义谢谢。如果我可以禁用跟踪并将图像放置在与相机和陀螺仪相同的距离处,以查看另一个方向,将图像保持在他的位置,那就太好了。对不起我的英语
猜你喜欢
  • 1970-01-01
  • 2022-10-04
  • 2021-08-05
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
相关资源
最近更新 更多