首页 > 编程知识 正文

Vuforia Demo讲解,乌斯曼草棒讲解

时间:2023-05-06 06:30:59 阅读:275520 作者:4553

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

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



模板接口

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


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


SampleApplicationSession : 该类抽象Vuforia的关键生命周期,并作为参数传递给每个单独的样本。这个类包含以下关键方法:

initAR()        初始化Vuforia,和做准备工作startAR()        pauseAR()   暂停Vuforia 和 停掉相机resumeAR()    stopAR()    停止所有正在进行的初始化。停止VuforiastopCamera() 

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


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

doInitTrackers()    初始化trackersdoLoadTrackersData()     加载trackers 数据doStartTrackers()         doStopTrackers()doUnloadTrackersData()  销毁trackers数据doDeinitTrackers()        取消初始化trackers

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

onInitARDone()        Vuforia初始化完成之后调用,trackers 已经被初始化,数据也被加载,tracking等待被开启。onVuforiaUpdate()        
在Android中使用

    Vuforia所有基础功能都在ActivityLauncher中列表展示,例如:ImageTargets 、Multi-targets 等。所有独立功能的Demo( ImageTargets.java 、VuMark.java )都继承 实现 SampleApplicationControl SampleAppMenuInterface .

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

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

@Overrideprotected 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 . onInitARDone() 在initAR( )完成之后执行。m_sessionControl . doInitTrackers() 在InitVuforiaTask完成之后。
m_sessionControl . doStartTrackers() 在starAR( )方法执行期间调用。
m_sessionControl . doLoadTrackersData( )  作为LoadTrackerTask执行步骤的一部分。
 m_sessionControl.doDeinitTrackers() 和 doUnloadTrackersData( ) 在stopAR( ) 中调用。

SampleApplicationSession 实现Vuforia.IpdateCallbackInterface接口:

public void Vuforia_onUpdate(State state);

SampleApplicationSession 注册 Vuforia 

Vuforia.registerCallback(SampleApplicationSession.this)

onVuforiaUpdate(s)方法调用

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


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

1.初始化Tracker

@Overridepublic 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

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

3. 初始化数据集

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

@Overridepublic 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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。