vuforia的其中一個重要特性,就是雲端識別。識別圖可以不用封存在應用中,而是保存在高通的雲端,也爲自己的應用節省了圖片的容量了,也能方便自己增加識別圖而不用隨時更改應用。那就開始來嘗試下吧。
首先得在https://developer.vuforia.com有自己的開發者賬號,然後到Resource下的Sample例子下載Cloud Recognition開發包,那是一個集合,解壓出來就能看到了,然後import到unity中。Target Manager下選擇CloudDatabases自己創建數據庫名,然後添加識別圖
name自己取,尺寸寬度就寫識別圖的寬度就好了,第三個就是上傳識別圖,第四個上傳要求是txt文件(這個txt文件內容可以自己按需求寫,metadata意思是元數據,當識別成功後可以獲取到對應識別圖的元數據,你可以設置json格式的一些數據,或者你需要的任何字符),識別圖達到三星以上比較好。
接下來到unity界面
把ARCamera,CloudRecognition,ImageTarget拖到Hierarchy界面,將想出現的3D模型拖到ImageTarget下,這裏顯示的unitychan
選擇CloudRecognition,右邊要填寫兩個key,可以在開發者網站上雲數據庫那找到,注意要填寫的是Client的key,這樣纔可以搜索你的雲數據庫。然後要把cloudRecoEventHandler文件拖入,然後把ImageTarget拖到這個文件出來的空格中,即ImageTargetTemplate空中
對了,ImageTarget看不清,不方便擺放模型,可以點擊ImageTarget右邊這裏選擇個圖片,如下圖
最後導出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);
具體多看看官方給的例子吧