Vuforia 官方Demo讲解

匿名 (未验证) 提交于 2019-12-03 00:22:01

官方原文地址:https://library.vuforia.com/articles/Solution/Native-Sample-Application-Template

今天看到的36氪新闻:高通发布面向VR/AR一体机的骁龙XR1芯片 支持4K视频



模板接口

三个重要的接口:SampleApplicationSession、SampleApplicationControl、SampleAppMenuCommandProtocal.


SampleAppMenuCommandProtocal : 这个类在IOS中时一个协议,在Android中时一个普通的类。每个独立的功能都要正确的实现类里的函数。(在android Demo中未找到这个类)。


这个类还包含了 投影矩阵。在显示增强时使用投影矩阵,保证三维视图的透视投影与设备摄像机视图一致。


SampleApplicationControl :这个接口包含每个独立的功能,每个独立的功能都要正确的实现类里的函数。关键方法:

  • 初始化trackers
  • doStopTrackers()

下面两个函数是异步调用的。取决于Vuforia的状态变化


在Android中使用


SampleAppMenuInterface 抽象方法menuProcess(); 该方法处理不同的命令,如前后摄像头的选择、启用闪光灯、聚焦模式选择。

SampleApplicationSession 在onCreat()方法中创建实例。控制AR生命周期。

@Override protected void onCreate(Bundle savedInstanceState) { Log.d(LOGTAG, "onCreate"); super.onCreate(savedInstanceState);   vuforiaAppSession = new SampleApplicationSession(this); ... }

SampleApplicationSession 的构造函数传递SampleApplicationControl实例

public SampleApplicationSession(SampleApplicationControl sessionControl) { m_sessionControl = sessionControl; }
  • m_sessionControl . doInitTrackers() 在InitVuforiaTask完成之后。
  • m_sessionControl . doStartTrackers() 在starAR( )方法执行期间调用。

SampleApplicationSession 实现Vuforia.IpdateCallbackInterface接口:

public void Vuforia_onUpdate(State state);

Vuforia.registerCallback(SampleApplicationSession.this)

onVuforiaUpdate(s)方法调用

@Override public void Vuforia_onUpdate(State s){      m_sessionControl.onVuforiaUpdate(s); }


示例:ImageTargets 功能实现SampApplicationContral的方法。

1.初始化Tracker

@Override public boolean doInitTrackers() { // 标记跟踪器已经被正确的初始化 boolean result = true;   TrackerManager tManager = TrackerManager.getInstance(); Tracker tracker;   //尝试初始化图像跟踪器 tracker = tManager.initTracker(ObjectTracker.getClassType()); if (tracker == null) { Log.e(LOGTAG, "Tracker already initialized or camera already started"); result = false; } else { Log.i(LOGTAG, "Tracker successfully initialized"); } return result; }

2 De-initialize the Tracker

@Override public boolean doDeinitTrackers() { // Indicate if the trackers were deinitialized correctly boolean result = true;   TrackerManager tManager = TrackerManager.getInstance(); tManager.deinitTracker(ObjectTracker.getClassType());   return result; }

3. 初始化数据集

初始 Tarmac 和 StonesAndChips 的数据集, 将在tracker中被用到

@Override public boolean doLoadTrackersData() { ...   if (!mCurrentDataset.load( mDatasetStrings.get(mCurrentDatasetSelectionIndex), DataSet.STORAGE_TYPE.STORAGE_APPRESOURCE)) return false;   if (!objectTracker.activateDataSet(mCurrentDataset)) return false;   ...   return true; }

4.开启Tracker

@Override public boolean doStopTrackers() { // Indicate if the trackers were stopped correctly boolean result = true;   Tracker objectTracker = TrackerManager.getInstance().getTracker( ObjectTracker.getClassType()); if (objectTracker != null) objectTracker.stop();   return result; }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!