? ? ? ? ?首先來(lái)說(shuō)一下我們公司的需求:有雷同的碼農(nóng)可以往下看看政,我們公司比較坑想讓我寫(xiě)一個(gè)AR識(shí)別博物館藏品功能這個(gè)比較蛋疼,(就是類(lèi)似與掃二維碼然后彈出詳細(xì)信息的功能)抄罕。
當(dāng)我看了官方demo的時(shí)候我發(fā)現(xiàn)有兩個(gè)可以研究允蚣,說(shuō)明一下我研究的是VuforiaSamples-6-2-61和vuforia-sdk-ios-6-2-6官方下載
這個(gè)是demo跑起來(lái)的首頁(yè)
demo運(yùn)行步驟:
1.demo識(shí)別圖片都在【vuforia-sdk-ios-6-2-6 ->media】文件里面(對(duì)于大神這些都不是個(gè)事,但對(duì)于我這種菜菜就是這個(gè)事)
2.ImageTargets功能做入,這個(gè)功能官方的是上傳一張圖片冒晰,識(shí)別成功以后會(huì)顯示一個(gè)3D模型,對(duì)于顯示模型后面我給改成跳轉(zhuǎn)到另一個(gè)Controller竟块。(所以這個(gè)功能比較符合我們公司的需求)
3VuMark功能這個(gè)比較神奇壶运,我之所以沒(méi)有采用,問(wèn)題就處在.svg圖上浪秘,我們美工不會(huì)蒋情,我也沒(méi)辦法埠况,下面就介紹ImageTargets功能里面的一些簡(jiǎn)單方法
官方的初始化方法啥的就不說(shuō)了,照著寫(xiě)就行了棵癣,我說(shuō)一個(gè)最關(guān)鍵的方法在ImageTargetsEAGLView.mm文件中
4.這個(gè)方法是AR相機(jī)不停地識(shí)別掃描辕翰,然后渲染的方法
- (void) renderFrameWithState:(const Vuforia::State&) state projectMatrix:(Vuforia::Matrix44F&) projectionMatrix {}
在介紹之前我還要簡(jiǎn)單的說(shuō)一下使用方法:在識(shí)別界面手指雙擊會(huì)彈出菜單有三個(gè)Switch其中Flash就是開(kāi)啟閃光燈,其他兩個(gè)就是在這個(gè)方法面用到的狈谊。
上面方法中有
if (offTargetTrackingEnabled) {
}else {}這一類(lèi)的如果Switch(ExtendTracking)這個(gè)按鈕出于開(kāi)啟狀態(tài)喜命,程序就會(huì)走if里面否則就是else,默認(rèn)是else.
(const Vuforia::State&) state:這個(gè)是識(shí)別跟蹤到數(shù)據(jù)狀態(tài)(個(gè)人理解,具體是啥我也不知道)里面包含了的畴,你上傳到高通服務(wù)器上圖片的信息渊抄。
(Vuforia::Matrix44F&) projectionMatrix:這個(gè)是將要顯示的模型矩陣。(就是3D模型)
解釋一下這個(gè)for循環(huán): ? ? ?
for (int i = 0; i < state.getNumTrackableResults(); ++i) {【當(dāng)你去識(shí)別你的圖片的時(shí)候state才會(huì)不為空f(shuō)or循環(huán)才會(huì)被執(zhí)行丧裁,否則里面的代碼是不會(huì)被執(zhí)行的】
其中state.getNumTrackableResults()這可是一個(gè)好東西呀是相機(jī)跟蹤到的所有結(jié)果的數(shù)量(個(gè)人理解)
打印NSLog(@"state%d",state.getNumTrackableResults());這個(gè)你會(huì)發(fā)現(xiàn)跟你上傳到服務(wù)器上面識(shí)別的圖片數(shù)量一樣护桦,此時(shí)作為開(kāi)發(fā)人員你就應(yīng)該有想法了。
const Vuforia::TrackableResult* result = state.getTrackableResult(i);這一句
const Vuforia::Trackable& trackable = result->getTrackable();
這兩句就是得到當(dāng)前正在識(shí)別的可追蹤的對(duì)象數(shù)據(jù)
打印NSLog(@"state %s",trackable.getName());
NSLog(@"state %d",trackable.getId());你會(huì)發(fā)現(xiàn)你上傳的圖片名字和id,這正是你正在掃描的那張圖片OK煎娇,
現(xiàn)在一個(gè)重大的問(wèn)題解決了二庵,首先你知道協(xié)議方法是哪一個(gè),如何區(qū)分你所上傳的圖片缓呛。
5.下面介紹一下
識(shí)別以后每次回調(diào)更新AR的方法催享,這方法自然在ImageTargetsViewController.mm控制器中
這個(gè)里面人家原有的看不懂,你可以不用動(dòng)哟绊,直接在下面將上面的for循環(huán)寫(xiě)在后面
會(huì)報(bào)錯(cuò)原因是少了頭文件#import<Vuforia/TrackableResult.h>添加以后應(yīng)該就沒(méi)啥問(wèn)題了因妙,
然后你就可以在控制區(qū)中拿到你想要區(qū)分?jǐn)?shù)據(jù)。
6.下面就可以實(shí)現(xiàn)我們自己的東西了首先你要干的事情就不要再demo定義的方法里面實(shí)現(xiàn)了票髓,他掃描的速度很快攀涵,異步啥的人家已經(jīng)搞好,你現(xiàn)在要做的就是再開(kāi)一個(gè)線程洽沟,然后知道如何啟動(dòng)AR掃描以故,如何關(guān)閉AR,暫停等裆操。
啟動(dòng):NSError *error = [[NSError alloc]init];
[vapp startAR:Vuforia::CameraDevice::CAMERA_DIRECTION_BACK error:&error];
停止:在- (void)viewWillDisappear:(BOOL)animated里面你可以參考一下怒详,demo里面的
暫停:- (void) pauseAR {}調(diào)這個(gè)
恢復(fù):- (void) resumer{}調(diào)這個(gè)
7.最后重點(diǎn)是Trackable.h文件這里面都是識(shí)別到的信息。你都可以用trackable.getId()這種方式訪問(wèn)踪区。
時(shí)間匆忙來(lái)不及細(xì)細(xì)解說(shuō)昆烁,都是我個(gè)人的看法,要是有不對(duì)的地方朽缴,請(qǐng)大家多多幫我指正善玫,我是一個(gè)小菜菜,請(qǐng)不要用大神的標(biāo)準(zhǔn)來(lái)衡量,記住我很菜菜茅郎。