摘要:
首先,您将图片上传到Vuforia云,以便返回xml和.dat文件.那些存储在Streaming Assets中的. dat文件包含有关标记的二进制格式的所有信息. xml包含有关名称和大小的信息,并链接到C#组件.
Vuforia允许创建运行时标记或云标记,但我们暂时将其遗漏.这个想法保持不变.
当您运行应用程序时,相机硬件CH(不是Unity相机,记住这一点),提供了一个feed.该Feed在Unity场景中的纹理上渲染,Unity摄像头UC面向该纹理.那些是固定在空间中的,只有纹理的内容用CH提供每个帧的内容来更新.
这是您的应用程序的现实.
同时,Vuforia扫描CH馈送并执行模式识别https://en.wikipedia.org/wiki/Pattern_recognition,试图找到与您提供的dat文件匹配的模式.
当找到模式时,它执行第二次运行以定义该模式相对于CH的距离和旋转.这是可能的,因为xml文件包含真实标记的尺寸.如果xml表示50×50并且你的标记是25×25,它将是预期的两倍,因为系统理解标记比实际距离更远.
当识别出标记时,Vuforia会调用DefaultTrackableEventHandler上的状态监听器(检查模型父级上的脚本),它实现了这个方法:
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
OnTrackingFound();
}
else
{
OnTrackingLost();
}
}
基本上,如果Vuforia检测到更改,它会调用该方法.然后你可以传播事件进一步使OnTrackingFound / Lost公共事件进入任何可以注册的事件.或者创建一个实现ITrackableEventHandler的新脚本.这只是关于模型被发现或丢失的倾听.在示例中,找到时,它显示模型,反之亦然.这是最可能和最基本的情况,但任何事情都可以触发.
计算结果表示变换(位置,旋转).该Transform将传递给场景中的第二台Unity摄像机.坐标用(0,0,0)定义为标记的位置.它很可能针对您放置的3D模型.请注意,您可以将模型放置在场景中的任何位置,它只是偏移.无法控制Vuforia相机,如果您尝试将值传递给Transform,它们会被Vuforia覆盖.你并不打算玩那些价值观.另一方面,您可以将其设置为打开和关闭,影响某些渲染等.
第一个UC具有较低的深度,因此它首先渲染真实场景,第二个渲染在顶部,它通过3D模型增强了现实.使用一组图层蒙版,第二个相机会忽略场景的其余部分,因此仅考虑模型.
你真的不想玩背景信息,但你肯定希望与模型交互,这样做,就像任何普通场景一样.抓住Vuforia相机的相机组件并从前向方向进行光线投射.检查你的命中并采取行动.