Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測
接續前幾篇教學,我們已經建置好 Vuforia 開發及執行環境、建立屬於自己的 Image Target、以及把茶壺更換成方塊 ,這邊繼續記錄怎麼使用 Android NDK 來開發,內文有說明為什麼好好的 Android 版本不用卻要用到麻煩的 Android NDK 開發。
2016-07-07 更新:本篇為 3.x 版本,目前 Vuforia 以更新到 5.5.9,新版本使用方式請參考
Android Vuforia 系列:
- 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) – 多重模型載入,以 obj 為例
馬上解除大家疑問,使用 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 專案,重新整理專案後執行
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 步驟,多重偵測功能正式被開啟!
Qualcomm Vuforia 系列:
- Qualcomm Vuforia 教學 (1) – 安裝 Vuforia
- Qualcomm Vuforia 教學 (2) – Create Image Target
- Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本
- Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測
- Qualcomm Vuforia 教學 (5) – 替換茶壺 – Android JNI 版本
- Qualcomm Vuforia 教學 (6) – 3D model -> .obj -> .h
你有没有image target native 3-0-5_0? 4.0 我试了不能用。
可以给我 ImageTargetsNative的folder吗?我下载的没有.jni file.谢
Dear Tan:
您要到 https://developer.vuforia.com/downloads/samples
Advanced Topics
Download Sample Apps for Android
vuforia-samples-advanced-android-4-0-103.zip (56.74 MB)
下載這個就會有囉!