unity+vuforia(AR)(Cloud Recognition)

vuforia的其中一个重要特性,就是云端识别。识别图可以不用封存在应用中,而是保存在高通的云端,也为自己的应用节省了图片的容量了,也能方便自己增加识别图而不用随时更改应用。那就开始来尝试下吧。

首先得在https://developer.vuforia.com有自己的开发者账号,然后到Resource下的Sample例子下载Cloud Recognition开发包,那是一个集合,解压出来就能看到了,然后import到unity中。Target Manager下选择CloudDatabases自己创建数据库名,然后添加识别图

unity+vuforia(AR)(Cloud Recognition)_第1张图片

name自己取,尺寸宽度就写识别图的宽度就好了,第三个就是上传识别图,第四个上传要求是txt文件(这个txt文件内容可以自己按需求写,metadata意思是元数据,当识别成功后可以获取到对应识别图的元数据,你可以设置json格式的一些数据,或者你需要的任何字符),识别图达到三星以上比较好。

接下来到unity界面

unity+vuforia(AR)(Cloud Recognition)_第2张图片

把ARCamera,CloudRecognition,ImageTarget拖到Hierarchy界面,将想出现的3D模型拖到ImageTarget下,这里显示的unitychan

unity+vuforia(AR)(Cloud Recognition)_第3张图片选择CloudRecognition,右边要填写两个key,可以在开发者网站上云数据库那找到,注意要填写的是Client的key,这样才可以搜索你的云数据库。然后要把cloudRecoEventHandler文件拖入,然后把ImageTarget拖到这个文件出来的空格中,即ImageTargetTemplate空中

对了,ImageTarget看不清,不方便摆放模型,可以点击ImageTarget右边这里选择个图片,如下图

unity+vuforia(AR)(Cloud Recognition)_第4张图片

最后导出android程序就可以了,扫描下图片就可以显示出模型了。跟基础的区别是识别图没存在应用里,而是高通的云数据库中。metadata应该主要用以区别是扫中哪个图片吧,我自己理解的,还望求教。

最后还有一个小问题需要提一下,用手机扫描的时候,我们可能会发现摄像头一直没法对焦,影像模糊,怎么办呢?我们可以到ARCamera下的WebCamBehaviour中加上以下代码:

bool focusModeSet = CameraDevice.Instance.SetFocusMode (CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
if (!focusModeSet) {
      Debug.Log ("Failed to set focus mode (unsupported mode).");
}

如果没有start方法,就用start方法把上面的代码包住。如果有就写start方法里面就好了。具体的解释详见http://bbs.csdn.net/topics/390884037,感谢liang_704959721进行翻译。

对于cloudRecoEventHandler这个文件,我们也可以自定义,但一定要记得继承ICloudRecoEventHandler,而且要重写下面的5个方法:

    /// <summary>
    /// called when the CloudRecoBehaviour has finished initializing
    /// </summary>
    void OnInitialized();
 
    /// <summary>
    /// called when an error is reported during initialization
    /// </summary>
    void OnInitError(TargetFinder.InitState initError);
 
    /// <summary>
    /// called when an error is reported while updating
    /// </summary>
    void OnUpdateError(TargetFinder.UpdateState updateError);
 
    /// <summary>
    /// called when the CloudRecoBehaviour starts or stops scanning
    /// </summary>
    void OnStateChanged(bool scanning);
 
    /// <summary>
    /// called when a new search result is found
    /// </summary>
    void OnNewSearchResult(TargetFinder.TargetSearchResult targetSearchResult);
具体多看看官方给的例子吧 委屈

你可能感兴趣的:(unity,高通,ar,增强现实,vuforia)