接續前幾篇教學,我們已經建置好 Vuforia 開發及執行環境建立屬於自己的 Image Target、以及把茶壺更換成方塊 ,這邊繼續記錄怎麼使用 Android NDK 來開發,內文有說明為什麼好好的 Android 版本不用卻要用到麻煩的 Android NDK 開發。

2016-07-07 更新:本篇為 3.x 版本,目前 Vuforia 以更新到 5.5.9,新版本使用方式請參考 

Android Vuforia with jPCT-AE (1) – 基本範例
Android Vuforia with jPCT-AE (2) – 載入 obj 測試
Android Vuforia with jPCT-AE (3) – 載入 md2 測試

Android Vuforia with jPCT-AE (4) – 載入 3ds 測試
Android Vuforia with jPCT-AE (5) – 多重模型載入

馬上解除大家疑問,使用 Android NDK 開發絕對不是自找麻煩,而是小蛙搜遍的各式各樣的教學後得到的答案。

  • 如果你的 APP 希望可以在一個畫面偵測到 1 個以上 Image Target 的話,Android 版本無法做到這項需求
  • 如果你的 3D 模型不是只有正方形、長方形這樣簡單

在 Android 版本無法解決上述兩個問題,因此才需要使用 Android NDK 的方式來開發。Android 版本中如果 3D 模型太複雜,在定義像 Teapot.java 這種檔案的時候會出現「The code of method xxx is exceeding the 65535 bytes limit」錯誤,使用網路上的一些免費模型來測試都沒辦法。

Android NDK 的安裝方式在 Qualcomm Vuforia 教學 (1) – 安裝 Vuforia 有提到 (只是下載以及設定 Eclipse Android NDK 目錄),如果安裝 NDK 有遇到什麼問題,請自行 Google …

先說明 Android NDK 的使用方法,也許有更好的方法,但小蛙找到這種可用的方法就直接用囉!

1. 到 參1 下載 NDK 版本的範例 – ImageTargetsNative-3-0-5.zip

2. 解壓縮檔案,並且依照  Qualcomm Vuforia 教學 (1) – 安裝 Vuforia 提到的方法將專案匯入到 Eclipse,要這邊要注意路徑的問題,如果你的工作目錄有空白一定要避開,像小蛙本來在 Program Files 下,但執行 NDK 時會發生錯誤,因此改成放在 D:\vuforia-sdk-android-3-0-9\samples\ 下。

3. 先執行一次專案看看,發現點了 Start 就出現「java.lang.UnsatisfiedLinkError: Native method not found: com.qualcomm.QCARSamples.ImageTargets.ImageTargets.setActivityPortraitMode:(Z)V」錯誤 …

4. 我們先執行 NDK 編譯出新的 .so 檔案才能繼續使用,開啟「cmd」->以小蛙為例,進到「D:\vuforia-sdk-android-3-0-9\samples\ImageTargetsNative\jni>」,注意 Android.mk 檔案中已經設定了路徑,所以一定要放在 sample 目錄下,或如果對 NDK 熟悉的網友可直接修改 Android.mk

D:\vuforia-sdk-android-3-0-9\samples\ImageTargetsNative\jni\>ndk-build
[armeabi-v7a] Compile++ arm  : ImageTargetsNative <= ImageTargets.cpp
...
[armeabi-v7a] Install        : libVuforia.so => libs/armeabi-v7a/libVuforia.so

5. 整個過程如果沒有出現 Error 就表示編譯成功,回到 Eclipse 的 ImageTargetsNative 專案,重新整理專案後執行

016.png

 

6. 開啟被封印的能力,多重偵測!
開啟 ImageTargetsNative > jni > ImageTargets.cpp,找到

JNIEXPORT void JNICALL Java_com_qualcomm_QCARSamples_ImageTargets_ImageTargets_onQCARInitializedNative(JNIEnv *, jobject)
{
    ...
}

 把上述「…」部分改成以下內容

     // Comment in to enable tracking of up to 2 targets simultaneously and
     // split the work over multiple frames:
     QCAR::setHint(QCAR::HINT_MAX_SIMULTANEOUS_IMAGE_TARGETS, 2);
     // Register the update callback where we handle the data set swap:
     QCAR::registerCallback(&updateCallback);

7. 重複執行第 4 步驟,與第 5 步驟,多重偵測功能正式被開啟!
017.png

 

Vuforia 系列文章:

  1. Qualcomm Vuforia 教學 (1) – 安裝 Vuforia
  2. Qualcomm Vuforia 教學 (2) – Create Image Target
  3. Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本
  4. Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測
  5. Qualcomm Vuforia 教學 (5) – 替換茶壺 – Android JNI 版本
  6. Qualcomm Vuforia 教學 (6) – 3D model -> .obj -> .h

 

參考資料:

  1. Image Targets – C++ @ Vuforia Developer Portal
    https://developer.vuforia.com/resources/sample-apps/image-targets-c
  2. Detecting and Tracking Multiple Targets Simultaneously @ Vuforia Developer Portal
    https://developer.vuforia.com/resources/dev-guide/detecting-and-tracking-multiple-targets-simultaneously
相關文章

Android Vuforia with jPCT-AE (5) – 多重模型載入,以 obj 為例

要進到這系列最後一篇文章了,這篇文章拖了很久,一直沒有時間整理,結果到最後 ... 程式碼留下來了,記憶卻有些模糊了,這邊小蛙配著程式碼盡可能的把還記得的東西寫下來。
2016-07-06 11:24:19
hans

18

Android Vuforia with jPCT-AE (4) – 載入 3DS 測試

延續 jPCT-AE Loader 載入模型的部份,這篇要記錄載入 3ds 檔案格式的方法,基本上跟前面幾個 obj, md2 的方法差不多,只有一些小小的變化而已。
2016-07-06 10:24:33
hans

18

Android Vuforia with jPCT-AE (3) – 載入 md2 測試

前兩篇介紹如何直接透過 jPCT-AE 直接繪圖以及載入 .obj 檔案,這邊繼續介紹 jPCT-AE 載入 md2 的方法,載入動作大致上類似,唯一不同的只有 texture 設定部份。
2016-07-06 09:24:43
hans

18

Android Vuforia with jPCT-AE (2) – 載入 obj 測試

上一篇 Android Vuforia with jPCT-AE (1) –
2016-07-06 08:24:55
hans

18

Android Vuforia with jPCT-AE (1) – 基本範例

說來慚愧,從 Google Adsense 被 ban 之後,就好久沒有發文了,站上 Vuforia 的文章也已經是好久以前的事情了 (遠目),最近有專案要用到 Vuforia,爬以前的文回來看,蛙哩咧 ... 現在已經更新到 Vu
2016-07-06 07:57:58
hans

18

Qualcomm Vuforia 教學 (5) – 替換茶壺 – Android JNI 版本

前面的文章提到為什麼要用 Android NDK 來開發,既然已經有了 Android 版本替換茶壺的文章,這邊記錄 Android NDK 版本的替換茶壺。
2014-12-09 17:54:17
hans

18

Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本

接續上一篇 
2014-12-09 15:38:17
hans

18

Android 2.3 @JavascriptInterface Issue

JavascriptInterface 這個問題相信 Google 一下就可以找到很多文章,雖然如此小蛙還是試了好久才成功,這篇文章記錄一下當時小蛙不成功的盲點在哪裡。上一篇文章「
2014-03-28 20:25:25
hans

18

Android 與 WebView 中的 Javascript 相互溝通

最近的一個 app 需要讓 Android 可以呼叫 WebView 中的 Javascript,並且按下 WebView 中的按鈕時,也可以呼叫 Android 內部的方法,這篇文章記錄一下大概的做法,免得下次遇到又忘記 ...
2014-03-28 20:25:19
hans

18




  3 則留言 to “Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測”

  1. 你有没有image target native 3-0-5_0? 4.0 我试了不能用。

  2. 可以给我 ImageTargetsNative的folder吗?我下载的没有.jni file.谢

 回覆

你可以使用以下語法 HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="">

(required)

(required)

   
© 2012 蛙齋 Suffusion theme by Sayontan Sinha