<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NDK &#8211; 記下來</title>
	<atom:link href="https://noter.tw/tag/ndk/feed/" rel="self" type="application/rss+xml" />
	<link>https://noter.tw</link>
	<description>一路上踩到的坑、遇到的問題，一點一滴記下來，希望能幫助到需要的人~</description>
	<lastBuildDate>Mon, 13 Mar 2023 14:32:02 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.3</generator>

<image>
	<url>https://noter.tw/wp-content/uploads/cropped-old-1130742_1920-1-32x32.jpg</url>
	<title>NDK &#8211; 記下來</title>
	<link>https://noter.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Qualcomm Vuforia 教學 (6) – 3D model -&#062; .obj -&#062; .h</title>
		<link>https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/</link>
					<comments>https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 10 Dec 2014 03:25:50 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[.obj]]></category>
		<category><![CDATA[3d Model]]></category>
		<category><![CDATA[banana]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[obj2opengl]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[NDK]]></category>
		<category><![CDATA[Qualcomm]]></category>
		<category><![CDATA[Vuforia]]></category>
		<category><![CDATA[JNI]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3403</guid>

					<description><![CDATA[<p>終於來到 Vuforia 記錄的最後一篇了，這篇參考到網路上神人的做法，怎麼把一個 3D model 轉換成 Vuforia 可以使用的 .h 檔，這邊之後都直接使用 Android NDK (JNI&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/" data-wpel-link="internal">Qualcomm Vuforia 教學 (6) – 3D model -&#062; .obj -&#062; .h</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>終於來到 Vuforia 記錄的最後一篇了，這篇參考到網路上神人的做法，怎麼把一個 3D model 轉換成 Vuforia 可以使用的 .h 檔，這邊之後都直接使用 Android NDK (JNI) 版本來實作，原因在<a rel="noreferrer noopener" href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" target="_blank" data-wpel-link="internal">這篇文章</a>。 </p>



<span id="more-3403"></span>



<p><strong>2016-07-07 更新：本篇為 3.x 版本，目前 Vuforia 以更新到 5.5.9，新版本使用方式請參考</strong></p>



<p><strong>Android Vuforia 系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) – 基本範例</a></li><li><a href="https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (2) – 載入 obj 測試</a></li><li><a href="https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (3) – 載入 md2 測試</a></li><li><a href="https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (4) – 載入 3DS 測試</a></li><li><a href="https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例</a></li></ul>


<p>之前小蛙卡了很久，不知道怎麼把 3D model 轉換成 OpenGL 可以繪圖的座標，找到 <a href="http://heikobehrens.net/2009/08/27/obj2opengl/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參1<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 的資料後，卻因為一開始使用&nbsp;<a href="https://noter.tw/3360/qualcomm-vuforia-%e6%95%99%e5%ad%b8-3-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-%e7%89%88%e6%9c%ac/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本</a>，在編譯上出現「<span style="color: #ff0000;"><strong>The code of method xxx is exceeding the 65535 bytes limit</strong></span>」一直無法解決，直到 &#8230; 改成用&nbsp;<a title="Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測" href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測</a> 才能正常運作。<br>花了一個下午的時間，看看 <span style="color: #0000ff;"><strong>Blender</strong> </span>是怎麼進行 3D 塑模的動作，發現這似乎需要非常強大的天分才能夠駕馭 &#8230; 不過至少知道透過 <span style="color: #0000ff;"><strong>Blender</strong> </span>可以把其他檔案格式匯入後，再轉出我們需要的<strong><span style="color: #ff0000;"> .obj</span> </strong>格式，雖然可能有些資訊會無法正常呈現，或者一些奇奇怪怪的問題，不過小蛙對這種軟體不是很了解，在這邊遇到問題的捧由只能自己 Google 了。<br>講一下大概的運作方式，首先必須先有 3D model (廢話)，這個 3D model 格式只要是一般常見的 blender, unity, 3dmax &#8230; 等格式，或是你使用的塑模軟體有辦法吃進去並且轉出 .obj 格式都可以，有一點要<strong><span style="color: #ff0000;">特別特別特別注意</span></strong>，Vuforia 繪圖只能<strong><span style="color: #0000ff;">使用一張材質</span></strong>，也就是說如果一個房子有屋頂、牆壁、門、窗戶、地板、煙囪 &#8230; 等等材質，這些材質必須最後轉出成一個檔案，這部份可能要專業的 3D 塑模師才能做到 (小蛙摸了半天，結果令人失望)，如果網路上下載來的專案檔包含了很多不同圖檔，就會發現 Vuforia 只會貼一張圖檔，其他的會變成殘缺樣，解套方案除了上面提到的將多材質轉製成一個影像檔，另一個比較麻煩，實作上也比較困難，就是把模型裡的每個不同貼圖的部份拆出來 (光聽就覺得超麻煩 &#8230;)<br>整個運作流程為：<br>1. 從網路上<span style="color: #0000ff;"><strong>找免費的 3D 模型測試</strong></span> (google <strong><span style="color: #ff00ff;">free 3d model</span></strong> 有很多，不過大多是要註冊會員)，如果自己會建模就可以省掉這麻煩，小蛙用的是 <strong><span style="color: #0000ff;">Blender</span></strong>，根據 <a href="https://zh.wikipedia.org/wiki/Blender" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參3<span class="wpel-icon wpel-image wpel-icon-6"></span></a>&nbsp;支援匯入的檔案格式有</p>
<div>
<div id="highlighter_196934" class="syntaxhighlighter  text">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="text plain">Collada (.dae)</code></div>
<div class="line number2 index1 alt1"><code class="text plain">Motion Capture (.bvh)</code></div>
<div class="line number3 index2 alt2"><code class="text plain">Scalable Vector Graphics (.svg)</code></div>
<div class="line number4 index3 alt1"><code class="text plain">Stanford (.ply)</code></div>
<div class="line number5 index4 alt2"><code class="text plain">Stl (.stl)</code></div>
<div class="line number6 index5 alt1"><code class="text plain">Autodesk 3ds Max (.3ds)</code></div>
<div class="line number7 index6 alt2"><code class="text plain">Autodesk FBX (.fbx)</code></div>
<div class="line number8 index7 alt1"><code class="text plain">Wavefront (.obj)</code></div>
<div class="line number9 index8 alt2"><code class="text plain">X3D Extensible 3D (.x3d)</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>2. 匯出 (Export) 成 Object <span style="color: #ff0000;"><strong>(.obj)</strong></span> 格式，以 Blender 為例，匯出時必須勾選以下選項</p>
<div>
<div id="highlighter_935560" class="syntaxhighlighter  text">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="text plain">apply Modifiers</code></div>
<div class="line number2 index1 alt1"><code class="text plain">Include Edges</code></div>
<div class="line number3 index2 alt2"><code class="text plain">Write Normals</code></div>
<div class="line number4 index3 alt1"><code class="text plain">Include UVs</code></div>
<div class="line number5 index4 alt2"><code class="text plain">Write Materials</code></div>
<div class="line number6 index5 alt1"><code class="text plain">Object as OBJ Objects</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>3. 下載&nbsp;<a href="http://heikobehrens.net/2009/08/27/obj2opengl/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參1<span class="wpel-icon wpel-image wpel-icon-6"></span></a>&nbsp;中的轉換程式與範例：<a href="https://github.com/HBehrens/obj2opengl/zipball/master" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">OBJ2OPENGL.ZIP<span class="wpel-icon wpel-image wpel-icon-6"></span></a>，並解壓縮到 <strong><span style="color: #0000ff;">obj2opengl</span> </strong>資料夾，裡面主程式是 <span style="color: #ff0000;"><strong>obj2opengl.pl</strong></span> 以及，banana 跟 cube 兩種範例。<br>4.&nbsp;由於 obj2opengl 是以 <span style="color: #0000ff;"><strong>perl</strong> </span>執行，點選 <a href="http://www.activestate.com/activeperl/downloads" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參4<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 下載並安裝，安裝過程一直下一步即可，安裝完成後開啟 cmd 輸入 <span style="color: #ff0000;"><strong>perl -v</strong></span> 如果成功安裝可以在這邊看到 perl 的版本細節<br>5. 使用 <span style="color: #0000ff;"><strong>cmd</strong> </span>進入 obj2opengl 資料夾後，輸入「<span style="color: #ff0000;"><strong>perl obj2opengl.pl banana.obj</strong></span>」(如果是用&nbsp;<a title="Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本" href="https://noter.tw/3360/qualcomm-vuforia-%e6%95%99%e5%ad%b8-3-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-%e7%89%88%e6%9c%ac/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本</a> 的話，產出的 .h 檔會因為資料量太大無法把資訊放入 MeshObject.java 中，所以要使用 <a title="Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測" href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測</a> 才可以進行)，如果訊息如下並且沒看到任何 error 會產生出一個新的 banana.h 並把原本的覆蓋掉</p>
<div>
<div id="highlighter_649985" class="syntaxhighlighter  text">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="text plain">Input file : .\banana.obj</code></div>
<div class="line number2 index1 alt1"><code class="text plain">Output file : .\banana.h</code></div>
<div class="line number3 index2 alt2"><code class="text plain">Object name : banana</code></div>
<div class="line number4 index3 alt1"><code class="text plain">Center : &lt;2289.89534195908, 599.62239347371, -8421.71066976487&gt;</code></div>
<div class="line number5 index4 alt2"><code class="text plain">Scale by : 0.000175074008952644</code></div>
<div class="line number6 index5 alt1"><code class="text plain">----------------</code></div>
<div class="line number7 index6 alt2"><code class="text plain">Vertices : 4032</code></div>
<div class="line number8 index7 alt1"><code class="text plain">Faces : 8056</code></div>
<div class="line number9 index8 alt2"><code class="text plain">Texture Coords : 4420</code></div>
<div class="line number10 index9 alt1"><code class="text plain">Normals : 4032</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>6. 接著參考&nbsp;<a title="Qualcomm Vuforia 教學 (5) – 替換茶壺 – Android JNI 版本" href="https://noter.tw/3392/qualcomm-vuforia-%e6%95%99%e5%ad%b8-5-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-jni-%e7%89%88%e6%9c%ac/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Qualcomm Vuforia 教學 (5) – 替換茶壺 – Android JNI 版本</a> 中的步驟，banana.h 放到<strong><span style="color: #ff0000;"> jni</span> </strong>目錄下，banana.jpg 放在<span style="color: #ff0000;"><strong> assets</strong> </span>目錄下。<br>7. 修改&nbsp;<span style="color: #0000ff;"><strong>ImageTargets.java</strong></span></p>
<div>
<div id="highlighter_789661" class="syntaxhighlighter  java">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="java keyword">private</code> <code class="java keyword">void</code> <code class="java plain">loadTextures()</code></div>
<div class="line number2 index1 alt1"><code class="java plain">{</code></div>
<div class="line number3 index2 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">//mTextures.add(Texture.loadTextureFromApk("TextureTeapotBrass.png", getAssets()));</code></div>
<div class="line number4 index3 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mTextures.add(Texture.loadTextureFromApk(</code><code class="java string">"TextureTeapotBlue.png"</code><code class="java plain">, getAssets()));</code></div>
<div class="line number5 index4 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mTextures.add(Texture.loadTextureFromApk(</code><code class="java string">"banana.jpg"</code><code class="java plain">, getAssets()));</code></div>
<div class="line number6 index5 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mTextures.add(Texture.loadTextureFromApk(</code><code class="java string">"TextureTeapotRed.png"</code><code class="java plain">, getAssets()));</code></div>
<div class="line number7 index6 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mTextures.add(Texture.loadTextureFromApk(</code><code class="java string">"Buildings.jpeg"</code><code class="java plain">, getAssets()));</code></div>
<div class="line number8 index7 alt1"><code class="java plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>8. 修改 jni 下的<span style="color: #0000ff;">&nbsp;<strong>ImageTargets.cpp</strong></span></p>
<div>
<div id="highlighter_489019" class="syntaxhighlighter  cpp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="cpp comments">// 在上方加入</code></div>
<div class="line number2 index1 alt1"><code class="cpp preprocessor">#include "banana.h"</code></div>
<div class="line number3 index2 alt2"><code class="cpp comments">// glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &amp;teapotVertices[0]);</code></div>
<div class="line number4 index3 alt1"><code class="cpp comments">// 改成</code></div>
<div class="line number5 index4 alt2"><code class="cpp plain">glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (</code><code class="cpp keyword bold">const</code> <code class="cpp plain">GLvoid*) &amp;bananaVerts[0]);</code></div>
<div class="line number6 index5 alt1"><code class="cpp comments">// glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &amp;teapotNormals[0]);</code></div>
<div class="line number7 index6 alt2"><code class="cpp comments">// 改成</code></div>
<div class="line number8 index7 alt1"><code class="cpp plain">glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (</code><code class="cpp keyword bold">const</code> <code class="cpp plain">GLvoid*) &amp;bananaNormals[0]);</code></div>
<div class="line number9 index8 alt2"><code class="cpp comments">// glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &amp;teapotTexCoords[0]);</code></div>
<div class="line number10 index9 alt1"><code class="cpp comments">// 改成</code></div>
<div class="line number11 index10 alt2"><code class="cpp plain">glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (</code><code class="cpp keyword bold">const</code> <code class="cpp plain">GLvoid*) &amp;bananaTexCoords[0]);</code></div>
<div class="line number12 index11 alt1"><code class="cpp comments">// glDrawElements(GL_TRIANGLES, NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*) &amp;teapotIndices[0]);</code></div>
<div class="line number13 index12 alt2"><code class="cpp comments">// 改成</code></div>
<div class="line number14 index13 alt1"><code class="cpp plain">glDrawArrays(GL_TRIANGLES, 0, cubeNumVerts);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>9. 開啟 <strong><span style="color: #0000ff;">cmd</span> </strong>到 <span style="color: #ff0000;"><strong>jni</strong> </span>目錄下執行<strong><span style="color: #ff0000;"> ndk-build</span></strong>，沒有任何錯誤的話，重新整理專案後執行即可，上個範例我們把茶壺換成方塊，現在可以換成香蕉了。<br><a title="023.png" href="http://lh6.ggpht.com/-5f6IQkJnRls/VIe6DVSRRQI/AAAAAAAAKnE/5-FVuwLwDKk/s0/023.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img fetchpriority="high" decoding="async" class="pe2-photo aligncenter" title="023.png" src="//lh6.ggpht.com/-5f6IQkJnRls/VIe6DVSRRQI/AAAAAAAAKnE/5-FVuwLwDKk/w500-o/023.png" alt="023.png" width="180" height="320"></a><br><a title="024.png" href="http://lh6.ggpht.com/-9kXLdrvwdKI/VIe6DTlRIBI/AAAAAAAAKnA/BKtUrGsLvOs/s0/024.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="024.png" src="//lh6.ggpht.com/-9kXLdrvwdKI/VIe6DTlRIBI/AAAAAAAAKnA/BKtUrGsLvOs/w500-o/024.png" alt="024.png" width="180" height="320"></a><br>經過這系列的文章，應該都可以把 Qualcomm Vuforia 運行起來，並且支援多重偵測，也有辦法自行把茶壺更換掉、更換貼圖、產出必須的 .h 檔案，下面貼幾張有趣的例子，這是網路上找到的免費 3D model，左上為模型的樣子-一間木屋，看到門開開的，走進去看看，右上為站在門口往裡看的樣子，左下是走進房子往天花板看的樣子，右下是從房子裡面往窗戶外面看的樣子，讓人不禁覺得 Qualcomm Vuforia 好強大啊！</p>
<p style="text-align: center;"><a title="019.png" href="http://lh6.ggpht.com/-ZJhSIoICKS4/VIbKKhRRLtI/AAAAAAAAKmY/40JY93-TkHk/s0/019.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone pe2-photo" title="019.png" src="//lh6.ggpht.com/-ZJhSIoICKS4/VIbKKhRRLtI/AAAAAAAAKmY/40JY93-TkHk/w500-o/019.png" alt="019.png" width="180" height="320"></a>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a title="020.png" href="http://lh5.ggpht.com/-1dqBka8tCy4/VIbKKvx8iEI/AAAAAAAAKmU/Qp_vqYQsvCE/s0/020.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone pe2-photo" title="020.png" src="//lh5.ggpht.com/-1dqBka8tCy4/VIbKKvx8iEI/AAAAAAAAKmU/Qp_vqYQsvCE/w500-o/020.png" alt="020.png" width="180" height="320"></a></p>
<p style="text-align: center;"><a title="021.png" href="http://lh3.ggpht.com/-BO2SPVEWOQE/VIbKKkECqyI/AAAAAAAAKmc/3d_RZO7Vh1k/s0/021.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone pe2-photo" title="021.png" src="//lh3.ggpht.com/-BO2SPVEWOQE/VIbKKkECqyI/AAAAAAAAKmc/3d_RZO7Vh1k/w500-o/021.png" alt="021.png" width="180" height="320"></a>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a title="022.png" href="http://lh6.ggpht.com/-NqjMOdic-Gg/VIbKLxWUNmI/AAAAAAAAKmk/cxCcd-gHDpU/s0/022.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone pe2-photo" title="022.png" src="//lh6.ggpht.com/-NqjMOdic-Gg/VIbKLxWUNmI/AAAAAAAAKmk/cxCcd-gHDpU/w500-o/022.png" alt="022.png" width="180" height="320"></a></p>


<p><strong>Qualcomm Vuforia&nbsp;</strong><strong>系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3320/qualcomm-vuforia-%e6%95%99%e5%ad%b8-1/" data-wpel-link="internal">Qualcomm Vuforia 教學 (1) – 安裝 Vuforia</a></li><li><a href="https://noter.tw/3347/qualcomm-vuforia-%e6%95%99%e5%ad%b8-2-create-image-target/" data-wpel-link="internal">Qualcomm Vuforia 教學 (2) – Create Image Target</a></li><li><a href="https://noter.tw/3360/qualcomm-vuforia-%e6%95%99%e5%ad%b8-3-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-%e7%89%88%e6%9c%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本</a></li><li><a href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測</a></li><li><a href="https://noter.tw/3392/qualcomm-vuforia-%e6%95%99%e5%ad%b8-5-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-jni-%e7%89%88%e6%9c%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (5) – 替換茶壺 – Android JNI 版本</a></li><li><a href="https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/" data-wpel-link="internal">Qualcomm Vuforia 教學 (6) – 3D model -&gt; .obj -&gt; .h</a></li></ul>



<h2 class="para wp-block-heading">參考資料</h2>



<ul class="my-li bg-darkblue wp-block-list"><li>obj2opengl: convert obj 3D models to arrays compatible with iPhone OpenGL ES @ Heiko Behrens<br>http://heikobehrens.net/2009/08/27/obj2opengl/   (<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">連結已失效</mark>)</li><li><a aria-label=" (在新分頁中開啟)" href="http://www.blender.org/" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">blender.org<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li><li><a aria-label=" (在新分頁中開啟)" href="https://zh.wikipedia.org/wiki/Blender" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">Blender @ 維基百科<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li><li><a aria-label=" (在新分頁中開啟)" href="http://www.activestate.com/activeperl/downloads" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">ActivePerl Downloads<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/" data-wpel-link="internal">Qualcomm Vuforia 教學 (6) – 3D model -&#062; .obj -&#062; .h</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測</title>
		<link>https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/</link>
					<comments>https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Tue, 09 Dec 2014 09:10:57 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[java.lang.UnsatisfiedLinkError]]></category>
		<category><![CDATA[JNI]]></category>
		<category><![CDATA[multi]]></category>
		<category><![CDATA[The code of method xxx is exceeding the 65535 bytes limit]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[NDK]]></category>
		<category><![CDATA[QCAR]]></category>
		<category><![CDATA[Qualcomm]]></category>
		<category><![CDATA[Vuforia]]></category>
		<category><![CDATA[ImageTarget]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3371</guid>

					<description><![CDATA[<p>接續前幾篇教學，我們已經建置好 Vuforia 開發及執行環境、建立屬於自己的 Image Target、以及把茶壺更換成方塊&#160;，這邊繼續記錄怎麼使用 Android NDK 來開發，內文有&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>接續前幾篇教學，我們已經<strong>建置好 Vuforia 開發及執行環境</strong>、<strong>建立屬於自己的 Image Target</strong>、以及<strong>把茶壺更換成方塊</strong>&nbsp;，這邊繼續記錄怎麼使用 Android NDK 來開發，內文有說明為什麼好好的 Android 版本不用卻要用到麻煩的 Android NDK 開發。 </p>



<span id="more-3371"></span>



<p><strong>2016-07-07 更新：本篇為 3.x 版本，目前 Vuforia 以更新到 5.5.9，新版本使用方式請參考&nbsp;</strong></p>



<p><strong>Android Vuforia 系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) – 基本範例</a></li><li><a href="https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (2) – 載入 obj 測試</a></li><li><a href="https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (3) – 載入 md2 測試</a></li><li><a href="https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (4) – 載入 3DS 測試</a></li><li><a href="https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例</a></li></ul>



<p>馬上解除大家疑問，使用 Android NDK 開發絕對不是自找麻煩，而是小蛙搜遍的各式各樣的教學後得到的答案。</p>



<ul class="my-li bg-darkblue wp-block-list"><li>如果你的 APP 希望可以在一個畫面偵測到 1 個以上 Image Target 的話，Android 版本無法做到這項需求</li><li>如果你的 3D 模型不是只有正方形、長方形這樣簡單</li></ul>



<p>在 Android 版本無法解決上述兩個問題，因此才需要使用 Android NDK 的方式來開發。Android 版本中如果 3D 模型太複雜，在定義像&nbsp;Teapot.java 這種檔案的時候會出現「<strong>The code of method xxx is exceeding the 65535 bytes limit</strong>」錯誤，使用網路上的一些免費模型來測試都沒辦法。</p>



<p>Android NDK 的安裝方式在&nbsp;<a href="https://noter.tw/3320/qualcomm-vuforia-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d-vuforia/" target="_blank" rel="noreferrer noopener" data-wpel-link="internal">Qualcomm Vuforia 教學 (1) – 安裝 Vuforia</a> 有提到 (只是下載以及設定 Eclipse Android NDK 目錄)，如果安裝 NDK 有遇到什麼問題，請自行 Google &#8230;</p>



<p>先說明 Android NDK 的使用方法，也許有更好的方法，但小蛙找到這種可用的方法就直接用囉！</p>



<p>1. 到 <a href="https://developer.vuforia.com//resources/sample-apps/image-targets-c?t=android-4820236" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">參1<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 下載 NDK 版本的範例 &#8211; <a href="https://developer.vuforia.com//resources/sample-apps/image-targets-c?t=android-4820236#sampleAppModal" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">ImageTargetsNative-3-0-5.zip<span class="wpel-icon wpel-image wpel-icon-6"></span></a></p>



<p>2. 解壓縮檔案，並且依照  <a href="https://noter.tw/3320/qualcomm-vuforia-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d-vuforia/" target="_blank" rel="noreferrer noopener" data-wpel-link="internal">Qualcomm Vuforia 教學 (1) – 安裝 Vuforia</a> 提到的方法將專案匯入到 Eclipse，要這邊要注意路徑的問題，如果你的工作目錄有空白一定要避開，像小蛙本來在 Program Files 下，但執行 NDK 時會發生錯誤，因此改成放在 D:\vuforia-sdk-android-3-0-9\samples\ 下。</p>



<p>3. 先執行一次專案看看，發現點了 Start 就出現「<strong>java.lang.UnsatisfiedLinkError: Native method not found: com.qualcomm.QCARSamples.ImageTargets.ImageTargets.setActivityPortraitMode:(Z)V</strong>」錯誤 &#8230;</p>



<p>4. 我們先執行 NDK 編譯出新的 .so 檔案才能繼續使用，開啟「cmd」->以小蛙為例，進到「D:\vuforia-sdk-android-3-0-9\samples\ImageTargetsNative\jni>」，注意 Android.mk 檔案中已經設定了路徑，所以一定要放在 sample 目錄下，或如果對 NDK 熟悉的網友可直接修改</p>



<pre class="wp-block-preformatted withcode">Android.mk D:\vuforia-sdk-android-3-0-9\samples\ImageTargetsNative\jni> ndk-build 
[armeabi-v7a] Compile++ arm  : ImageTargetsNative &lt;= ImageTargets.cpp …  
[armeabi-v7a] Install        : libVuforia.so => libs/armeabi-v7a/libVuforia.so</pre>



<p>5. 整個過程如果沒有出現 Error 就表示編譯成功，回到 Eclipse 的 ImageTargetsNative 專案，重新整理專案後執行</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><a href="http://lh3.ggpht.com/-_WHT-WL9d7s/VIa3nGyAHiI/AAAAAAAAKlQ/np528SHrnpw/s0/016.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh3.ggpht.com/-_WHT-WL9d7s/VIa3nGyAHiI/AAAAAAAAKlQ/np528SHrnpw/w500-o/016.png" alt="016.png" width="250" height="445" title="016.png"/></a></figure></div>



<p>6. 開啟被封印的能力，多重偵測！開啟 ImageTargetsNative > jni > ImageTargets.cpp，找到</p>



<pre class="wp-block-preformatted withcode">JNIEXPORT void JNICALL Java_com_qualcomm_QCARSamples_ImageTargets_ImageTargets_onQCARInitializedNative(JNIEnv *, jobject)
 {
     …
 }</pre>



<p>把上述「…」部分改成以下內容</p>



<pre class="wp-block-preformatted withcode">// 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(&amp;updateCallback);</pre>



<p>7. 重複執行第 4 步驟，與第 5 步驟，多重偵測功能正式被開啟！</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><a href="http://lh5.ggpht.com/-ImbnYucZT3E/VIa7qUiRHEI/AAAAAAAAKlk/DpfAdo3ESvQ/s0/017.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh5.ggpht.com/-ImbnYucZT3E/VIa7qUiRHEI/AAAAAAAAKlk/DpfAdo3ESvQ/w500-o/017.png" alt="017.png" width="250" height="445" title="017.png"/></a></figure></div>



<p><strong>Qualcomm Vuforia&nbsp;</strong><strong>系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3320/qualcomm-vuforia-%e6%95%99%e5%ad%b8-1/" data-wpel-link="internal">Qualcomm Vuforia 教學 (1) – 安裝 Vuforia</a></li><li><a href="https://noter.tw/3347/qualcomm-vuforia-%e6%95%99%e5%ad%b8-2-create-image-target/" data-wpel-link="internal">Qualcomm Vuforia 教學 (2) – Create Image Target</a></li><li><a href="https://noter.tw/3360/qualcomm-vuforia-%e6%95%99%e5%ad%b8-3-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-%e7%89%88%e6%9c%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本</a></li><li><a href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測</a></li><li><a href="https://noter.tw/3392/qualcomm-vuforia-%e6%95%99%e5%ad%b8-5-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-jni-%e7%89%88%e6%9c%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (5) – 替換茶壺 – Android JNI 版本</a></li><li><a href="https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/" data-wpel-link="internal">Qualcomm Vuforia 教學 (6) – 3D model -&gt; .obj -&gt; .h</a></li></ul>



<h2 class="para wp-block-heading">參考資料</h2>



<ul class="my-li bg-darkblue wp-block-list"><li><a rel="noreferrer noopener nofollow external" aria-label="Image Targets - C++ @ Vuforia Developer Portal (在新分頁中開啟)" href="https://developer.vuforia.com/resources/sample-apps/image-targets-c" target="_blank" data-wpel-link="external" class="wpel-icon-right">Image Targets &#8211; C++ @ Vuforia Developer Portal<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li><li><a href="https://developer.vuforia.com/resources/dev-guide/detecting-and-tracking-multiple-targets-simultaneously" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">Detecting and Tracking Multiple Targets Simultaneously&nbsp;@ Vuforia Developer Portal<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Qualcomm Vuforia 教學 (1) &#8211; 安裝 Vuforia</title>
		<link>https://noter.tw/3320/qualcomm-vuforia-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d-vuforia/</link>
					<comments>https://noter.tw/3320/qualcomm-vuforia-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d-vuforia/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 08 Dec 2014 10:08:50 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[vuforia-sdk-android]]></category>
		<category><![CDATA[VuforiaSample]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[NDK]]></category>
		<category><![CDATA[QCAR]]></category>
		<category><![CDATA[Qualcomm]]></category>
		<category><![CDATA[Vuforia]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3320</guid>

					<description><![CDATA[<p>工作上有使用 AR:&#160;Augmented Reality 的需求，上網找找看有沒有什麼不錯的套件，在 SocialCompare 這網站條列了現有 AR 套件的功能說明與比較 (參1)，經過&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3320/qualcomm-vuforia-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d-vuforia/" data-wpel-link="internal">Qualcomm Vuforia 教學 (1) &#8211; 安裝 Vuforia</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>工作上有使用 <strong>AR:&nbsp;Augmented Reality</strong> 的需求，上網找找看有沒有什麼不錯的套件，在 SocialCompare 這網站條列了現有 AR 套件的功能說明與比較 (<a rel="noreferrer noopener nofollow external" href="http://socialcompare.com/en/comparison/augmented-reality-sdks" target="_blank" data-wpel-link="external" class="wpel-icon-right">參1<span class="wpel-icon wpel-image wpel-icon-6"></span></a>)，經過一番比較挑中了 <strong>Qualcomm Vuforia</strong> 來實作，原因在於 ImageTarget 小於 100 的情況並且不使用特殊功能的情況下是免費的 (<a rel="noreferrer noopener nofollow external" href="https://developer.vuforia.com/target-manager" target="_blank" data-wpel-link="external" class="wpel-icon-right">參2<span class="wpel-icon wpel-image wpel-icon-6"></span></a>)，這篇記錄一下安裝的過程。 </p>



<span id="more-3320"></span>



<p><strong>2016-07-07 更新：本篇為 3.x 版本，目前 Vuforia 以更新到 5.5.9，新版本使用方式請參考&nbsp;</strong></p>



<p><strong>Android Vuforia 系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) – 基本範例</a></li><li><a href="https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (2) – 載入 obj 測試</a></li><li><a href="https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (3) – 載入 md2 測試</a></li><li><a href="https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (4) – 載入 3DS 測試</a></li><li><a href="https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例</a></li></ul>


<p>AR 的介紹小蛙就不多說了，這裡主要以記錄安裝過程為主，有興趣的朋友可以連結到參考資料或維基百科去看看更多說明。</p>
<p style="padding-left: 30px;"><strong>1. 上 Vuforia Vuforia Portal</strong> (<a href="https://developer.vuforia.com/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">https://developer.vuforia.com/<span class="wpel-icon wpel-image wpel-icon-6"></span></a>)<br><a title="001.png" href="http://lh3.ggpht.com/-xcjhWVtRrCw/VIVroiprpZI/AAAAAAAAKik/tNthvK0LQzE/s0/001.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="001.png" src="//lh3.ggpht.com/-xcjhWVtRrCw/VIVroiprpZI/AAAAAAAAKik/tNthvK0LQzE/w500-o/001.png" alt="001.png"></a></p>
<p></p>
<p style="padding-left: 30px;"><strong>2. 點選 Download 後進入以下畫面</strong>，再點選「<span style="color: #0000ff;"><strong>Download Download SDK 3.0.9 for Windows/Mac/Linux</strong></span>」<br><a title="002.png" href="http://lh4.ggpht.com/-wXyxbq1kA0M/VIVro8nXbOI/AAAAAAAAKig/pTrdsIdq9BU/s0/002.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="002.png" src="//lh4.ggpht.com/-wXyxbq1kA0M/VIVro8nXbOI/AAAAAAAAKig/pTrdsIdq9BU/w500-o/002.png" alt="002.png"></a></p>
<p></p>
<p style="padding-left: 30px;"><strong>&nbsp; 3. 下載 SDK 需要登入</strong>，如果沒有帳號密碼點選「<span style="color: #0000ff;"><strong>Create account now</strong></span>」，登入後即可開始下載 SDK。<br><a title="003.png" href="http://lh3.ggpht.com/-0DPnttWpgZQ/VIVrosr_HhI/AAAAAAAAKiY/wpyeN7KM0EU/s0/003.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="003.png" src="//lh3.ggpht.com/-0DPnttWpgZQ/VIVrosr_HhI/AAAAAAAAKiY/wpyeN7KM0EU/w500-o/003.png" alt="003.png"></a>&nbsp; &nbsp; &nbsp;&nbsp;<a title="004.png" href="http://lh6.ggpht.com/-6dHP9w1YcOY/VIVrprDiWkI/AAAAAAAAKio/LNWUUZtJrHs/s0/004.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="004.png" src="//lh6.ggpht.com/-6dHP9w1YcOY/VIVrprDiWkI/AAAAAAAAKio/LNWUUZtJrHs/w500-o/004.png" alt="004.png" height="336"></a></p>
<p></p>
<p style="padding-left: 30px;"><strong>4.&nbsp;安裝 Android SDK + 安裝/更新 ADT 到新版</strong><br>如果版本不符合 Eclipse 會跳出提示，這邊小蛙偷懶跳過不做了，可參考到&nbsp;<strong><a href="http://www.inote.tw/how-to-set-android-development-environment-with-android-sdk" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">[教學] 如何使用 Eclipse、Android SDK、ADT 配置 Android 開發環境 ？ @ 海芋小站<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong> (參4)</p>
<p style="padding-left: 30px;"><strong>5.&nbsp;安裝 Vuforia SDK</strong><br>解壓縮下載來的壓縮檔<span style="color: #ff00ff;"><strong>&nbsp;vuforia-sdk-android-3-0-9.zip</strong></span>，解壓縮後把所有的工具放在 <span style="color: #0000ff;"><strong>&lt;DEVELOPMENT_ROOT&gt;</strong></span> 目錄下，之後都會稱這個目錄為&nbsp;<span style="color: #0000ff;"><strong>&lt;DEVELOPMENT_ROOT&gt;</strong></span>，例如：放在&nbsp;C:\Program Files\Android 的話，<strong><span style="color: #0000ff;">&lt;DEVELOPMENT_ROOT&gt;</span></strong> 就代表 <span style="color: #ff00ff;"><strong>C:\Program Files\Android</strong></span>。這邊要注意的是，小蛙發現如果放的路徑中間有空白，可能在做 ndk-build 或其他動作的時候會發生錯誤，如果可以盡可能選擇沒有空白的路徑。</p>
<p style="padding-left: 30px;"><strong>6.&nbsp;安裝 Android NDK</strong><br>到 (<a href="https://developer.android.com/tools/sdk/ndk/index.html#Installing" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參5<span class="wpel-icon wpel-image wpel-icon-6"></span></a>) 下載 NDK，小蛙的環境是 Windows 8.1 64 bit 選擇自己對應的版本下載，解壓縮到剛剛第 5 點提到的&nbsp;<strong><span style="color: #0000ff;">&lt;DEVELOPMENT_ROOT&gt;</span></strong>，因此整個結構會變成：</p>
<pre>  C:\Program Files\Android\
                           android-ndk\
                           android-sdk\
                           vuforia-sdk\</pre>
<p style="padding-left: 30px;"><strong>7. 設定 NDK</strong><br>在<span style="color: #ff00ff;"><strong> Eclipse -&gt; Window -&gt; Android -&gt; NDK -&gt; NDK Location </strong></span>設定成上述路徑，例如：小蛙的是: C:\Program Files (x86)\Android\android-ndk-r10c (好孩子不要學，參考上面第 5 點，改成中間沒有空白的，不然後面會出問題)。</p>
<p style="padding-left: 30px;"><strong>8.&nbsp;設定 vuforia QCAR 環境變數</strong><br><span style="color: #ff00ff;"><strong>Eclipse -&gt; Window -&gt; Preferences -&gt; Java -&gt; Build Path -&gt; Classpath Variables -&gt; New&#8230;</strong></span><br>Name : <span style="color: #0000ff;"><strong>QCAR_SDK_ROOT</strong></span><br>Path : <strong><span style="color: #0000ff;">C:/Program Files (x86)/Android/vuforia-sdk-android-3-0-9</span></strong> (換成自己的路徑)</p>
<p style="padding-left: 30px;"><strong>9. 設定在 Eclipse 專案中使用 QCAR 變數</strong><br>在要使用 <strong><span style="color: #ff00ff;">Vuforia 的專案中 -&gt; 滑鼠右鍵 -&gt; Properties -&gt; Java Build Path -&gt;&nbsp;Libraries -&gt; Add Variable&#8230; -&gt; QCAR_SDK_ROOT -&gt; Extend&#8230; -&gt; build / java / vuforia / Vuforia.jar -&gt; OK</span></strong><br>接著到 <span style="color: #0000ff;"><strong>Order and Export</strong></span> 把剛剛新增的 <strong><span style="color: #0000ff;">QCAR_SDK_ROOT</span></strong>&#8230; 打勾</p>
<p style="padding-left: 30px;"><strong>10.&nbsp;下載測試範例</strong><br>下載 (https://developer.vuforia.com/resources/sample-apps/features) 並解壓縮到&nbsp;<span style="color: #0000ff;"><strong>&lt;DEVELOPMENT_ROOT&gt;</strong></span><strong><span style="color: #ff00ff;">\vuforia-sdk-android-3-0-9\samples</span></strong></p>
<p style="padding-left: 30px;"><strong>11.&nbsp;匯入範例檔</strong><br><strong><span style="color: #ff00ff;">Eclipse -&gt; File -&gt; Import&#8230; -&gt; General -&gt; Existing Android Code Into Workspace&#8230;</span></strong><br>Root Directory : <strong><span style="color: #0000ff;">C:\Program Files (x86)\Android\vuforia-sdk-android-3-0-9\samples</span></strong><br>Projects : <span style="color: #0000ff;"><strong>VuforiaSamples-3-0-5_0</strong></span><br>怕把原始檔改壞，複製一分到自己的工作區域，把 <span style="color: #ff0000;">Copy projects into workspace</span> 打勾</p>
<p style="padding-left: 30px;"><strong>12.&nbsp;執行 VuforiaSample</strong><br><strong><span style="color: #ff00ff;">Run As -&gt; Android Application&nbsp;</span></strong><br>專案可以跑起來，但會得到以下錯誤</p>
<pre>BUILD FAILED
 D:\Workspace\PureProjectNew\VuforiaSamples\CopyVuforiaFiles.xml:4: D:\Workspace\build\lib\armeabi-v7a does not exist.</pre>
<p style="padding-left: 30px;"><strong>13.&nbsp;修改設定檔 CopyVuforiaFile.xml</strong></p>
<pre>&lt;fileset dir="C:/Program Files (x86)/Android/vuforia-sdk-android-3-0-9/build/lib/armeabi-v7a"/&gt;
存檔後，Project -&gt; Clean... -&gt; Clean projects selected below VuforiaSamples
Clean 完之後按照上個步驟執行就可以了！</pre>
<p style="padding-left: 30px;"><strong>14.&nbsp;使用範例圖片測試</strong><br>https://developer.vuforia.com/resources/sample-apps/features，每個 sample 點進去會有 PDF 的範例圖片可以測試，依照每個範例的名稱開啟對應的圖片。</p>
<p>經過一番折騰，Qualcomm Vuforia 已經順利安裝起來了，這系列文章預估會有以下內容：</p>


<p><strong>Qualcomm Vuforia&nbsp;</strong><strong>系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3320/qualcomm-vuforia-%e6%95%99%e5%ad%b8-1/" data-wpel-link="internal">Qualcomm Vuforia 教學 (1) – 安裝 Vuforia</a></li><li><a href="https://noter.tw/3347/qualcomm-vuforia-%e6%95%99%e5%ad%b8-2-create-image-target/" data-wpel-link="internal">Qualcomm Vuforia 教學 (2) – Create Image Target</a></li><li><a href="https://noter.tw/3360/qualcomm-vuforia-%e6%95%99%e5%ad%b8-3-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-%e7%89%88%e6%9c%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本</a></li><li><a href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測</a></li><li><a href="https://noter.tw/3392/qualcomm-vuforia-%e6%95%99%e5%ad%b8-5-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-jni-%e7%89%88%e6%9c%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (5) – 替換茶壺 – Android JNI 版本</a></li><li><a href="https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/" data-wpel-link="internal">Qualcomm Vuforia 教學 (6) – 3D model -&gt; .obj -&gt; .h</a></li></ul>



<p>敬請期待 (希望不會又偷懶不記錄 &#8230;)</p>



<h2 class="para wp-block-heading"><strong>參考資料</strong></h2>



<ul class="my-li bg-darkblue wp-block-list"><li><a rel="noreferrer noopener nofollow external" aria-label="Augmented Reality SDK Comparison&nbsp;@ SocialCompare (在新分頁中開啟)" href="http://socialcompare.com/en/comparison/augmented-reality-sdks" target="_blank" data-wpel-link="external" class="wpel-icon-right">Augmented Reality SDK Comparison&nbsp;@ SocialCompare<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li><li><a rel="noreferrer noopener nofollow external" aria-label=" (在新分頁中開啟)" href="https://developer.vuforia.com/target-manager" target="_blank" data-wpel-link="external" class="wpel-icon-right">Target Manager @ Vuforia Developer Portal<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li><li><a rel="noreferrer noopener nofollow external" aria-label=" (在新分頁中開啟)" href="https://zh.wikipedia.org/wiki/%E6%93%B4%E5%A2%9E%E5%AF%A6%E5%A2%83" target="_blank" data-wpel-link="external" class="wpel-icon-right">擴增實境 @ 維基百科<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li><li><a rel="noreferrer noopener nofollow external" aria-label=" (在新分頁中開啟)" href="http://www.inote.tw/how-to-set-android-development-environment-with-android-sdk" target="_blank" data-wpel-link="external" class="wpel-icon-right">[教學] 如何使用 Eclipse、Android SDK、ADT 配置 Android 開發環境 ？ @ 海芋小站<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li><li><a rel="noreferrer noopener nofollow external" aria-label=" (在新分頁中開啟)" href="https://developer.android.com/tools/sdk/ndk/index.html#Installing" target="_blank" data-wpel-link="external" class="wpel-icon-right">Installing the NDK @ Android Developers<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3320/qualcomm-vuforia-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d-vuforia/" data-wpel-link="internal">Qualcomm Vuforia 教學 (1) &#8211; 安裝 Vuforia</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3320/qualcomm-vuforia-%e6%95%99%e5%ad%b8-1-%e5%ae%89%e8%a3%9d-vuforia/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
	</channel>
</rss>
